APA102 (Adafruit DotStar LED Strip) see: https://developer.mbed.org/users/okini3939/notebook/led_strip/

Dependencies:   mbed

Committer:
okini3939
Date:
Thu Mar 17 03:09:59 2016 +0000
Revision:
1:8ad764aed49f
Parent:
0:27f99fa5a413
fix;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:27f99fa5a413 1 /*
okini3939 0:27f99fa5a413 2 * APA102 (Adafruit DotStar LED Strip)
okini3939 0:27f99fa5a413 3 */
okini3939 0:27f99fa5a413 4
okini3939 0:27f99fa5a413 5 #include "mbed.h"
okini3939 0:27f99fa5a413 6
okini3939 0:27f99fa5a413 7 #define LED_NUM 100
okini3939 0:27f99fa5a413 8 #define LED_GLOBAL 31 // brightness 0-31
okini3939 0:27f99fa5a413 9 #define LED_FREQ 500000 // spi
okini3939 0:27f99fa5a413 10
okini3939 0:27f99fa5a413 11 DigitalOut myled(LED1);
okini3939 0:27f99fa5a413 12 SPI spi(P0_21, P0_22, P1_15);
okini3939 0:27f99fa5a413 13
okini3939 0:27f99fa5a413 14 int led_buf[LED_NUM];
okini3939 0:27f99fa5a413 15
okini3939 1:8ad764aed49f 16 void dotStar () {
okini3939 0:27f99fa5a413 17 int i;
okini3939 0:27f99fa5a413 18
okini3939 0:27f99fa5a413 19 // start frame
okini3939 0:27f99fa5a413 20 for (i = 0; i < 4; i ++) {
okini3939 0:27f99fa5a413 21 spi.write(0);
okini3939 0:27f99fa5a413 22 }
okini3939 0:27f99fa5a413 23 // led frame
okini3939 0:27f99fa5a413 24 for (i = 0; i < LED_NUM; i ++) {
okini3939 0:27f99fa5a413 25 spi.write((7<<5) | LED_GLOBAL);
okini3939 0:27f99fa5a413 26 spi.write((led_buf[i] >> 16) & 0xff); // B
okini3939 0:27f99fa5a413 27 spi.write((led_buf[i] >> 8) & 0xff); // G
okini3939 0:27f99fa5a413 28 spi.write(led_buf[i] & 0xff); // R
okini3939 0:27f99fa5a413 29 }
okini3939 0:27f99fa5a413 30 // end frame
okini3939 0:27f99fa5a413 31 for (i = 0; i < 4; i ++) {
okini3939 0:27f99fa5a413 32 spi.write(1);
okini3939 0:27f99fa5a413 33 }
okini3939 0:27f99fa5a413 34 }
okini3939 0:27f99fa5a413 35
okini3939 0:27f99fa5a413 36 int main() {
okini3939 0:27f99fa5a413 37 int i, c;
okini3939 0:27f99fa5a413 38 int color = 1;
okini3939 0:27f99fa5a413 39
okini3939 0:27f99fa5a413 40 spi.frequency(LED_FREQ);
okini3939 0:27f99fa5a413 41
okini3939 0:27f99fa5a413 42 for (;;) {
okini3939 0:27f99fa5a413 43 for (i = 0; i < LED_NUM; i ++) {
okini3939 0:27f99fa5a413 44 c = ((color + i) % 7) + 1;
okini3939 0:27f99fa5a413 45 led_buf[i] = (c & 4 ? 0xff0000 : 0) | (c & 2 ? 0xff00 : 0) | (c & 1 ? 0xff : 0);
okini3939 0:27f99fa5a413 46 }
okini3939 1:8ad764aed49f 47 dotStar();
okini3939 0:27f99fa5a413 48 myled = !myled;
okini3939 0:27f99fa5a413 49 color ++;
okini3939 0:27f99fa5a413 50 if (color > 7) color = 1;
okini3939 0:27f99fa5a413 51 wait(0.2);
okini3939 0:27f99fa5a413 52 }
okini3939 0:27f99fa5a413 53 }