An example program of "colors" library, which drives a strip of serial RGB LEDs (WS2812) through SPI port.
main.cpp@0:99f7625b7724, 2015-05-23 (annotated)
- Committer:
- xkozima
- Date:
- Sat May 23 01:36:19 2015 +0000
- Revision:
- 0:99f7625b7724
An example program of "color" library, which drives a strip of serial RGB LEDs through SPI port.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
xkozima | 0:99f7625b7724 | 1 | #include "mbed.h" |
xkozima | 0:99f7625b7724 | 2 | #include "colors.h" |
xkozima | 0:99f7625b7724 | 3 | |
xkozima | 0:99f7625b7724 | 4 | #define NUM_LED 8 |
xkozima | 0:99f7625b7724 | 5 | |
xkozima | 0:99f7625b7724 | 6 | // hsv > rgb |
xkozima | 0:99f7625b7724 | 7 | |
xkozima | 0:99f7625b7724 | 8 | void h2rgb(float H, float *R, float *G, float *B) { |
xkozima | 0:99f7625b7724 | 9 | float S, V, C, H2, X; |
xkozima | 0:99f7625b7724 | 10 | S = 1.0; |
xkozima | 0:99f7625b7724 | 11 | V = 1.0; |
xkozima | 0:99f7625b7724 | 12 | C = V * S; |
xkozima | 0:99f7625b7724 | 13 | H = H - floor(H / 360.0) * 360.0; |
xkozima | 0:99f7625b7724 | 14 | H2 = H / 60.0; |
xkozima | 0:99f7625b7724 | 15 | X = C * (1.0 - fabs(fmodf(H2, 2.0) - 1.0)); |
xkozima | 0:99f7625b7724 | 16 | if (H2 < 1.0) { *R = C; *G = X; *B = 0; } |
xkozima | 0:99f7625b7724 | 17 | else if (H2 < 2.0) { *R = X; *G = C; *B = 0; } |
xkozima | 0:99f7625b7724 | 18 | else if (H2 < 3.0) { *R = 0; *G = C, *B = X; } |
xkozima | 0:99f7625b7724 | 19 | else if (H2 < 4.0) { *R = 0; *G = X, *B = C; } |
xkozima | 0:99f7625b7724 | 20 | else if (H2 < 5.0) { *R = X; *G = 0, *B = C; } |
xkozima | 0:99f7625b7724 | 21 | else if (H2 < 6.0) { *R = C; *G = 0, *B = X; } |
xkozima | 0:99f7625b7724 | 22 | *R += V - C; |
xkozima | 0:99f7625b7724 | 23 | *G += V - C; |
xkozima | 0:99f7625b7724 | 24 | *B += V - C; |
xkozima | 0:99f7625b7724 | 25 | } |
xkozima | 0:99f7625b7724 | 26 | |
xkozima | 0:99f7625b7724 | 27 | // main |
xkozima | 0:99f7625b7724 | 28 | |
xkozima | 0:99f7625b7724 | 29 | Colors colorLEDs; |
xkozima | 0:99f7625b7724 | 30 | |
xkozima | 0:99f7625b7724 | 31 | float hue = 0.0; |
xkozima | 0:99f7625b7724 | 32 | unsigned char colorData[NUM_LED][3]; |
xkozima | 0:99f7625b7724 | 33 | |
xkozima | 0:99f7625b7724 | 34 | int main() { |
xkozima | 0:99f7625b7724 | 35 | // setup |
xkozima | 0:99f7625b7724 | 36 | colorLEDs.setup(NUM_LED); |
xkozima | 0:99f7625b7724 | 37 | // send |
xkozima | 0:99f7625b7724 | 38 | while (1) { |
xkozima | 0:99f7625b7724 | 39 | for (int i = 0; i < NUM_LED; i++) { |
xkozima | 0:99f7625b7724 | 40 | float r, g, b; |
xkozima | 0:99f7625b7724 | 41 | h2rgb(hue + i * 30.0, &r, &g, &b); |
xkozima | 0:99f7625b7724 | 42 | colorData[i][0] = r * 255; |
xkozima | 0:99f7625b7724 | 43 | colorData[i][1] = g * 255; |
xkozima | 0:99f7625b7724 | 44 | colorData[i][2] = b * 255; |
xkozima | 0:99f7625b7724 | 45 | hue = hue + 0.05; |
xkozima | 0:99f7625b7724 | 46 | } |
xkozima | 0:99f7625b7724 | 47 | colorLEDs.send(colorData); |
xkozima | 0:99f7625b7724 | 48 | // |
xkozima | 0:99f7625b7724 | 49 | hue += 0.05; |
xkozima | 0:99f7625b7724 | 50 | wait_us(2000); |
xkozima | 0:99f7625b7724 | 51 | } |
xkozima | 0:99f7625b7724 | 52 | } |