Nathan Yonkee / Mbed OS DotStar

Fork of DotStar by Suga koubou

Committer:
tulanthoar
Date:
Thu Jun 22 12:14:38 2017 -0600
Revision:
3:7d7945d4f224
Parent:
2:804574387573
Child:
6:f16ae7276254
control two led strips with one l432

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tulanthoar 3:7d7945d4f224 1 /*
tulanthoar 3:7d7945d4f224 2 * APA102 (Adafruit DotStar LED Strip)
tulanthoar 3:7d7945d4f224 3 */
tulanthoar 3:7d7945d4f224 4
tulanthoar 3:7d7945d4f224 5 #include "mbed.h"
tulanthoar 3:7d7945d4f224 6 #include "rtos.h"
tulanthoar 3:7d7945d4f224 7
tulanthoar 3:7d7945d4f224 8 #define LED_NUM 146
tulanthoar 3:7d7945d4f224 9 #define LED_FREQ 500000 // spi
tulanthoar 3:7d7945d4f224 10
tulanthoar 3:7d7945d4f224 11 AnalogIn blueIn(PA_3);
tulanthoar 3:7d7945d4f224 12 AnalogIn greenIn(PA_1);
tulanthoar 3:7d7945d4f224 13 AnalogIn redIn(PA_0);
tulanthoar 3:7d7945d4f224 14 DigitalIn onOff(PA_8);
tulanthoar 3:7d7945d4f224 15 DigitalIn stripToggle(PB_1);
tulanthoar 3:7d7945d4f224 16 SPI spiOne(PB_5, PB_4, PB_3);
tulanthoar 3:7d7945d4f224 17 SPI spiTwo(PA_7, PA_6, PA_5);
tulanthoar 3:7d7945d4f224 18
tulanthoar 3:7d7945d4f224 19 Thread heartbeat;
tulanthoar 3:7d7945d4f224 20 void blink() {
tulanthoar 3:7d7945d4f224 21 /* for(DigitalOut led(LED2);; Thread::wait(500) ) { */
tulanthoar 3:7d7945d4f224 22 /* led = !led; */
tulanthoar 3:7d7945d4f224 23 /* } */
tulanthoar 3:7d7945d4f224 24 }
tulanthoar 3:7d7945d4f224 25
tulanthoar 3:7d7945d4f224 26 void dotStar (SPI *const line, int led_buf[]) {
tulanthoar 3:7d7945d4f224 27 int i;
tulanthoar 3:7d7945d4f224 28 for (i = 4; i --> 0; line->write(0)) { } // start frame
tulanthoar 3:7d7945d4f224 29 for (i = 0; i < LED_NUM; ++i) {
tulanthoar 3:7d7945d4f224 30 line->write((7<<5) | 31 ); // led frame
tulanthoar 3:7d7945d4f224 31 line->write((led_buf[i] >> 16) & 0xff); // B
tulanthoar 3:7d7945d4f224 32 line->write((led_buf[i] >> 8) & 0xff); // G
tulanthoar 3:7d7945d4f224 33 line->write(led_buf[i] & 0xff); // R
tulanthoar 3:7d7945d4f224 34 }
tulanthoar 3:7d7945d4f224 35 for (i = 4; i --> 0; line->write(1)) { } // end frame
tulanthoar 3:7d7945d4f224 36 }
tulanthoar 3:7d7945d4f224 37
tulanthoar 3:7d7945d4f224 38 int main() {
tulanthoar 3:7d7945d4f224 39 int led_buf[LED_NUM] = {};
tulanthoar 3:7d7945d4f224 40 int zero_buf[LED_NUM] = {};
tulanthoar 3:7d7945d4f224 41 int i, blue, green, red;
tulanthoar 3:7d7945d4f224 42 int cI = 0;
tulanthoar 3:7d7945d4f224 43 int pattern[4] = {};
tulanthoar 3:7d7945d4f224 44 spiOne.frequency(LED_FREQ);
tulanthoar 3:7d7945d4f224 45 spiTwo.frequency(LED_FREQ);
tulanthoar 3:7d7945d4f224 46 dotStar(&spiOne, led_buf);
tulanthoar 3:7d7945d4f224 47 dotStar(&spiTwo, led_buf);
tulanthoar 3:7d7945d4f224 48
tulanthoar 3:7d7945d4f224 49 const int waitTime = 1000;
tulanthoar 3:7d7945d4f224 50 for (heartbeat.start(callback(blink));; Thread::wait(waitTime)) {
tulanthoar 3:7d7945d4f224 51 blue = static_cast<int>(floor(blueIn.read()*0xff))<< 16;
tulanthoar 3:7d7945d4f224 52 green = static_cast<int>(floor(greenIn.read()*0xff))<< 8;
tulanthoar 3:7d7945d4f224 53 red = floor(redIn.read()*0xff);
tulanthoar 3:7d7945d4f224 54 pattern[0] = green | red;
tulanthoar 3:7d7945d4f224 55 pattern[1] = green | blue;
tulanthoar 3:7d7945d4f224 56 pattern[2] = blue | red;
tulanthoar 3:7d7945d4f224 57 pattern[3] = green| blue | red ;
tulanthoar 3:7d7945d4f224 58 for (i = 0; i < LED_NUM; ++i) {
tulanthoar 3:7d7945d4f224 59 /* c = ((color + i) % 7) + 1; */
tulanthoar 3:7d7945d4f224 60 /* led_buf[i] = (c & 4 ? 0xff0000 : 0) | (c & 2 ? 0xff00 : 0) | (c & 1 ? 0xff : 0); */
tulanthoar 3:7d7945d4f224 61 /* led_buf[i] = even ? gr : gb; */
tulanthoar 3:7d7945d4f224 62 /* led_buf[i] = rb|green; */
tulanthoar 3:7d7945d4f224 63 /* if(!even) led_buf[i] = 0x0f000 | 0xff; */
tulanthoar 3:7d7945d4f224 64 /* else led_buf[i] = green | 0xff; */
tulanthoar 3:7d7945d4f224 65 /* led_buf[i] = led_buf[i] | 0x0f0000; */
tulanthoar 3:7d7945d4f224 66 /* even = !even; */
tulanthoar 3:7d7945d4f224 67 /* cI = (-(~cI & ~(cI >> 1))) & 0b11; */
tulanthoar 3:7d7945d4f224 68 led_buf[i] = pattern[3];
tulanthoar 3:7d7945d4f224 69 }
tulanthoar 3:7d7945d4f224 70 if(stripToggle) {
tulanthoar 3:7d7945d4f224 71 dotStar(&spiOne, led_buf);
tulanthoar 3:7d7945d4f224 72 }
tulanthoar 3:7d7945d4f224 73 dotStar(&spiTwo, led_buf);
tulanthoar 3:7d7945d4f224 74 while (!onOff.read()) {
tulanthoar 3:7d7945d4f224 75 dotStar(&spiTwo, zero_buf);
tulanthoar 3:7d7945d4f224 76 dotStar(&spiOne, zero_buf);
tulanthoar 3:7d7945d4f224 77 Thread::wait(100);
tulanthoar 3:7d7945d4f224 78 }
tulanthoar 3:7d7945d4f224 79 }
tulanthoar 3:7d7945d4f224 80 }