Suga koubou
/
DotStar
APA102 (Adafruit DotStar LED Strip) see: https://developer.mbed.org/users/okini3939/notebook/led_strip/
main.cpp@0:27f99fa5a413, 2016-03-17 (annotated)
- Committer:
- okini3939
- Date:
- Thu Mar 17 03:08:32 2016 +0000
- Revision:
- 0:27f99fa5a413
- Child:
- 1:8ad764aed49f
1st build;
Who changed what in which revision?
User | Revision | Line number | New 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 | 0:27f99fa5a413 | 16 | void dotsStar () { |
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 | 0:27f99fa5a413 | 47 | dotsStar(); |
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 | } |