An example program of "colors" library, which drives a strip of serial RGB LEDs (WS2812) through SPI port.

Dependencies:   colors mbed

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?

UserRevisionLine numberNew 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 }