RGB LEDs Control
Dependencies: mbed QEI PololuLedStrip
RgbControl.cpp
- Committer:
- whutsup
- Date:
- 2019-05-04
- Revision:
- 8:2a4298cbae3f
File content as of revision 8:2a4298cbae3f:
#include "mbed.h" #include "QEI.h" #include "PololuLedStrip.h" PololuLedStrip led7(PB_0); PololuLedStrip led6(PA_12); PololuLedStrip led5(PB_6); PololuLedStrip led4(PB_1); PololuLedStrip led3(PA_8); PololuLedStrip led2(PA_11); PololuLedStrip led1(PA_3); PololuLedStrip led0(PA_4); #define LED_COUNT 16 rgb_color colors0[LED_COUNT]; rgb_color colors1[LED_COUNT]; rgb_color colors2[LED_COUNT]; rgb_color colors3[LED_COUNT]; rgb_color colors4[LED_COUNT]; rgb_color colors5[LED_COUNT]; rgb_color colors6[LED_COUNT]; rgb_color colors7[LED_COUNT]; Ticker led; extern QEI re; extern int R; extern int G; extern int B; extern Serial bt; extern int dayLed; void LedOn1() { int pulse = re.getPulses(); int d = pulse/200; if(48>=d) { uint8_t r[8]; uint8_t g[8]; uint8_t b[8]; for (int i=0 ; i<8 ; i++) { int n = (i+1); int moveL_r = ((R/6)*(d-1*n*6))+R; int moveL_g = ((G/6)*(d-1*n*6))+G; int moveL_b = ((B/6)*(d-1*n*6))+B; moveL_r = (0 >= moveL_r) ? 0: moveL_r; moveL_g = (0 >= moveL_g) ? 0: moveL_g; moveL_b = (0 >= moveL_b) ? 0: moveL_b; moveL_r = (R <= moveL_r) ? R: moveL_r; moveL_g = (G <= moveL_g) ? G: moveL_g; moveL_b = (B <= moveL_b) ? B: moveL_b; r[i] = moveL_r; g[i] = moveL_g; b[i] = moveL_b; } for(int i=0; i<16; i++) { colors0[i] = (rgb_color){ r[0], g[0], b[0] }; colors1[i] = (rgb_color){ r[1], g[1], b[1] }; colors2[i] = (rgb_color){ r[2], g[2], b[2] }; colors3[i] = (rgb_color){ r[3], g[3], b[3] }; colors4[i] = (rgb_color){ r[4], g[4], b[4] }; colors5[i] = (rgb_color){ r[5], g[5], b[5] }; colors6[i] = (rgb_color){ r[6], g[6], b[6] }; colors7[i] = (rgb_color){ r[7], g[7], b[7] }; } led0.write(colors0, LED_COUNT); led1.write(colors1, LED_COUNT); led2.write(colors2, LED_COUNT); led3.write(colors3, LED_COUNT); led4.write(colors4, LED_COUNT); led5.write(colors5, LED_COUNT); led6.write(colors6, LED_COUNT); led7.write(colors7, LED_COUNT); } else if(52<=d) { uint8_t r[8]; uint8_t g[8]; uint8_t b[8]; for (int i=0 ; i<8 ; i++) { int moveR_r = -1*(R/6)*(d-1*(52+(i+1)*6))+R; int moveR_g = -1*(G/6)*(d-1*(52+(i+1)*6))+G; int moveR_b = -1*(B/6)*(d-1*(52+(i+1)*6))+B; moveR_r = (0 >= moveR_r) ? 0: moveR_r; moveR_g = (0 >= moveR_g) ? 0: moveR_g; moveR_b = (0 >= moveR_b) ? 0: moveR_b; moveR_r = (R <= moveR_r) ? R: moveR_r; moveR_g = (G <= moveR_g) ? G: moveR_g; moveR_b = (B <= moveR_b) ? B: moveR_b; r[i] = moveR_r; g[i] = moveR_g; b[i] = moveR_b; } for(int i=0; i<16; i++) { colors0[i] = (rgb_color){ r[0], g[0], b[0] }; colors1[i] = (rgb_color){ r[1], g[1], b[1] }; colors2[i] = (rgb_color){ r[2], g[2], b[2] }; colors3[i] = (rgb_color){ r[3], g[3], b[3] }; colors4[i] = (rgb_color){ r[4], g[4], b[4] }; colors5[i] = (rgb_color){ r[5], g[5], b[5] }; colors6[i] = (rgb_color){ r[6], g[6], b[6] }; colors7[i] = (rgb_color){ r[7], g[7], b[7] }; } led0.write(colors0, LED_COUNT); led1.write(colors1, LED_COUNT); led2.write(colors2, LED_COUNT); led3.write(colors3, LED_COUNT); led4.write(colors4, LED_COUNT); led5.write(colors5, LED_COUNT); led6.write(colors6, LED_COUNT); led7.write(colors7, LED_COUNT); } else { for(int i=0; i<16; i++) { colors0[i] = (rgb_color){ R, G, B }; colors1[i] = (rgb_color){ R, G, B }; colors2[i] = (rgb_color){ R, G, B }; colors3[i] = (rgb_color){ R, G, B }; colors4[i] = (rgb_color){ R, G, B }; colors5[i] = (rgb_color){ R, G, B }; colors6[i] = (rgb_color){ R, G, B }; colors7[i] = (rgb_color){ R, G, B }; } led0.write(colors0, LED_COUNT); led1.write(colors1, LED_COUNT); led2.write(colors2, LED_COUNT); led3.write(colors3, LED_COUNT); led4.write(colors4, LED_COUNT); led5.write(colors5, LED_COUNT); led6.write(colors6, LED_COUNT); led7.write(colors7, LED_COUNT); } } void LedOn2() { int pulse = re.getPulses(); int p = pulse/200; uint8_t k[8]; int n = 8; int d = 6; double bi= 0.02f; uint8_t r[8]; uint8_t g[8]; uint8_t b[8]; for (int i=0 ; i<8 ; i++) { k[i] = ((n-i)*d)/log((1/bi)+1); } if(48>=p) { for (int i=0 ; i<8 ; i++) { int moveL_r = R*bi*(10^((p-1*i*d)/k[i])-1); int moveL_g = G*bi*(10^((p-1*i*d)/k[i])-1); int moveL_b = B*bi*(10^((p-1*i*d)/k[i])-1);; moveL_r = (0 >= moveL_r) ? 0: moveL_r; moveL_g = (0 >= moveL_g) ? 0: moveL_g; moveL_b = (0 >= moveL_b) ? 0: moveL_b; moveL_r = (R <= moveL_r) ? R: moveL_r; moveL_g = (G <= moveL_g) ? G: moveL_g; moveL_b = (B <= moveL_b) ? B: moveL_b; r[i] = moveL_r; g[i] = moveL_g; b[i] = moveL_b; } for(int i=0; i<16; i++) { colors0[i] = (rgb_color){ r[0], g[0], b[0] }; colors1[i] = (rgb_color){ r[1], g[1], b[1] }; colors2[i] = (rgb_color){ r[2], g[2], b[2] }; colors3[i] = (rgb_color){ r[3], g[3], b[3] }; colors4[i] = (rgb_color){ r[4], g[4], b[4] }; colors5[i] = (rgb_color){ r[5], g[5], b[5] }; colors6[i] = (rgb_color){ r[6], g[6], b[6] }; colors7[i] = (rgb_color){ r[7], g[7], b[7] }; } led0.write(colors0, LED_COUNT); led1.write(colors1, LED_COUNT); led2.write(colors2, LED_COUNT); led3.write(colors3, LED_COUNT); led4.write(colors4, LED_COUNT); led5.write(colors5, LED_COUNT); led6.write(colors6, LED_COUNT); led7.write(colors7, LED_COUNT); } else if(49<=p) { for (int i=0 ; i<8 ; i++) { int moveR_r = R*bi*(10^((-1*p+(n+1+i)*d)/k[n-1-i])-1); int moveR_g = G*bi*(10^((-1*p+(n+1+i)*d)/k[n-1-i])-1); int moveR_b = B*bi*(10^((-1*p+(n+1+i)*d)/k[n-1-i])-1); moveR_r = (0 >= moveR_r) ? 0: moveR_r; moveR_g = (0 >= moveR_g) ? 0: moveR_g; moveR_b = (0 >= moveR_b) ? 0: moveR_b; moveR_r = (R <= moveR_r) ? R: moveR_r; moveR_g = (G <= moveR_g) ? G: moveR_g; moveR_b = (B <= moveR_b) ? B: moveR_b; r[i] = moveR_r; g[i] = moveR_g; b[i] = moveR_b; } for(int i=0; i<16; i++) { colors0[i] = (rgb_color){ r[0], g[0], b[0] }; colors1[i] = (rgb_color){ r[1], g[1], b[1] }; colors2[i] = (rgb_color){ r[2], g[2], b[2] }; colors3[i] = (rgb_color){ r[3], g[3], b[3] }; colors4[i] = (rgb_color){ r[4], g[4], b[4] }; colors5[i] = (rgb_color){ r[5], g[5], b[5] }; colors6[i] = (rgb_color){ r[6], g[6], b[6] }; colors7[i] = (rgb_color){ r[7], g[7], b[7] }; } led0.write(colors0, LED_COUNT); led1.write(colors1, LED_COUNT); led2.write(colors2, LED_COUNT); led3.write(colors3, LED_COUNT); led4.write(colors4, LED_COUNT); led5.write(colors5, LED_COUNT); led6.write(colors6, LED_COUNT); led7.write(colors7, LED_COUNT); } // else // { // // for(int i=0; i<16; i++) // { // colors0[i] = (rgb_color){ R, G, B }; // colors1[i] = (rgb_color){ R, G, B }; // colors2[i] = (rgb_color){ R, G, B }; // colors3[i] = (rgb_color){ R, G, B }; // colors4[i] = (rgb_color){ R, G, B }; // colors5[i] = (rgb_color){ R, G, B }; // colors6[i] = (rgb_color){ R, G, B }; // colors7[i] = (rgb_color){ R, G, B }; // } // // // led0.write(colors0, LED_COUNT); // led1.write(colors1, LED_COUNT); // led2.write(colors2, LED_COUNT); // led3.write(colors3, LED_COUNT); // led4.write(colors4, LED_COUNT); // led5.write(colors5, LED_COUNT); // led6.write(colors6, LED_COUNT); // led7.write(colors7, LED_COUNT); // } } void LedOn3() { int pulse = re.getPulses(); int d = pulse/200; if(48>=d) { uint8_t r[8]; uint8_t g[8]; uint8_t b[8]; for (int i=0 ; i<8 ; i++) { int moveL_r = ((R/(48-6*(i)))+1)*(d-48)+R; int moveL_g = ((G/(48-6*(i)))+1)*(d-48)+G; int moveL_b = ((B/(48-6*(i)))+1)*(d-48)+B; r[i] = (0 >= moveL_r) ? 0: moveL_r; g[i] = (0 >= moveL_g) ? 0: moveL_g; b[i] = (0 >= moveL_b) ? 0: moveL_b; } for(int i=0; i<16; i++) { colors0[i] = (rgb_color){ r[0], g[0], b[0] }; colors1[i] = (rgb_color){ r[1], g[1], b[1] }; colors2[i] = (rgb_color){ r[2], g[2], b[2] }; colors3[i] = (rgb_color){ r[3], g[3], b[3] }; colors4[i] = (rgb_color){ r[4], g[4], b[4] }; colors5[i] = (rgb_color){ r[5], g[5], b[5] }; colors6[i] = (rgb_color){ r[6], g[6], b[6] }; colors7[i] = (rgb_color){ r[7], g[7], b[7] }; } led0.write(colors0, LED_COUNT); led1.write(colors1, LED_COUNT); led2.write(colors2, LED_COUNT); led3.write(colors3, LED_COUNT); led4.write(colors4, LED_COUNT); led5.write(colors5, LED_COUNT); led6.write(colors6, LED_COUNT); led7.write(colors7, LED_COUNT); } else if(52<=d) { uint8_t r[8]; uint8_t g[8]; uint8_t b[8]; for (int i=0 ; i<8 ; i++) { int moveR_r = ((-1*R/(6+6*(i)))-1)*(d-52)+R; int moveR_g = ((-1*G/(6+6*(i)))-1)*(d-52)+G; int moveR_b = ((-1*B/(6+6*(i)))-1)*(d-52)+B; r[i] = (0 >= moveR_r) ? 0:moveR_r ; g[i] = (0 >= moveR_g) ? 0:moveR_g ; b[i] = (0 >= moveR_b) ? 0:moveR_b ; } for(int i=0; i<16; i++) { colors0[i] = (rgb_color){ r[0], g[0], b[0] }; colors1[i] = (rgb_color){ r[1], g[1], b[1] }; colors2[i] = (rgb_color){ r[2], g[2], b[2] }; colors3[i] = (rgb_color){ r[3], g[3], b[3] }; colors4[i] = (rgb_color){ r[4], g[4], b[4] }; colors5[i] = (rgb_color){ r[5], g[5], b[5] }; colors6[i] = (rgb_color){ r[6], g[6], b[6] }; colors7[i] = (rgb_color){ r[7], g[7], b[7] }; } led0.write(colors0, LED_COUNT); led1.write(colors1, LED_COUNT); led2.write(colors2, LED_COUNT); led3.write(colors3, LED_COUNT); led4.write(colors4, LED_COUNT); led5.write(colors5, LED_COUNT); led6.write(colors6, LED_COUNT); led7.write(colors7, LED_COUNT); } else { for(int i=0; i<16; i++) { colors0[i] = (rgb_color){ R, G, B }; colors1[i] = (rgb_color){ R, G, B }; colors2[i] = (rgb_color){ R, G, B }; colors3[i] = (rgb_color){ R, G, B }; colors4[i] = (rgb_color){ R, G, B }; colors5[i] = (rgb_color){ R, G, B }; colors6[i] = (rgb_color){ R, G, B }; colors7[i] = (rgb_color){ R, G, B }; } led0.write(colors0, LED_COUNT); led1.write(colors1, LED_COUNT); led2.write(colors2, LED_COUNT); led3.write(colors3, LED_COUNT); led4.write(colors4, LED_COUNT); led5.write(colors5, LED_COUNT); led6.write(colors6, LED_COUNT); led7.write(colors7, LED_COUNT); } } void MoonPhase() { int d = dayLed;; if(48>=d) { uint8_t r[8]; uint8_t g[8]; uint8_t b[8]; for (int i=0 ; i<8 ; i++) { int n = (i+1); int moveL_r = ((R/6)*(d-1*n*6))+R; int moveL_g = ((G/6)*(d-1*n*6))+G; int moveL_b = ((B/6)*(d-1*n*6))+B; moveL_r = (0 >= moveL_r) ? 0: moveL_r; moveL_g = (0 >= moveL_g) ? 0: moveL_g; moveL_b = (0 >= moveL_b) ? 0: moveL_b; moveL_r = (R <= moveL_r) ? R: moveL_r; moveL_g = (G <= moveL_g) ? G: moveL_g; moveL_b = (B <= moveL_b) ? B: moveL_b; r[i] = moveL_r; g[i] = moveL_g; b[i] = moveL_b; } for(int i=0; i<16; i++) { colors0[i] = (rgb_color){ r[0], g[0], b[0] }; colors1[i] = (rgb_color){ r[1], g[1], b[1] }; colors2[i] = (rgb_color){ r[2], g[2], b[2] }; colors3[i] = (rgb_color){ r[3], g[3], b[3] }; colors4[i] = (rgb_color){ r[4], g[4], b[4] }; colors5[i] = (rgb_color){ r[5], g[5], b[5] }; colors6[i] = (rgb_color){ r[6], g[6], b[6] }; colors7[i] = (rgb_color){ r[7], g[7], b[7] }; } led0.write(colors0, LED_COUNT); led1.write(colors1, LED_COUNT); led2.write(colors2, LED_COUNT); led3.write(colors3, LED_COUNT); led4.write(colors4, LED_COUNT); led5.write(colors5, LED_COUNT); led6.write(colors6, LED_COUNT); led7.write(colors7, LED_COUNT); } else if(52<=d) { uint8_t r[8]; uint8_t g[8]; uint8_t b[8]; for (int i=0 ; i<8 ; i++) { int moveR_r = -1*(R/6)*(d-1*(52+(i+1)*6))+R; int moveR_g = -1*(G/6)*(d-1*(52+(i+1)*6))+G; int moveR_b = -1*(B/6)*(d-1*(52+(i+1)*6))+B; moveR_r = (0 >= moveR_r) ? 0: moveR_r; moveR_g = (0 >= moveR_g) ? 0: moveR_g; moveR_b = (0 >= moveR_b) ? 0: moveR_b; moveR_r = (R <= moveR_r) ? R: moveR_r; moveR_g = (G <= moveR_g) ? G: moveR_g; moveR_b = (B <= moveR_b) ? B: moveR_b; r[i] = moveR_r; g[i] = moveR_g; b[i] = moveR_b; } for(int i=0; i<16; i++) { colors0[i] = (rgb_color){ r[0], g[0], b[0] }; colors1[i] = (rgb_color){ r[1], g[1], b[1] }; colors2[i] = (rgb_color){ r[2], g[2], b[2] }; colors3[i] = (rgb_color){ r[3], g[3], b[3] }; colors4[i] = (rgb_color){ r[4], g[4], b[4] }; colors5[i] = (rgb_color){ r[5], g[5], b[5] }; colors6[i] = (rgb_color){ r[6], g[6], b[6] }; colors7[i] = (rgb_color){ r[7], g[7], b[7] }; } led0.write(colors0, LED_COUNT); led1.write(colors1, LED_COUNT); led2.write(colors2, LED_COUNT); led3.write(colors3, LED_COUNT); led4.write(colors4, LED_COUNT); led5.write(colors5, LED_COUNT); led6.write(colors6, LED_COUNT); led7.write(colors7, LED_COUNT); } else { for(int i=0; i<16; i++) { colors0[i] = (rgb_color){ R, G, B }; colors1[i] = (rgb_color){ R, G, B }; colors2[i] = (rgb_color){ R, G, B }; colors3[i] = (rgb_color){ R, G, B }; colors4[i] = (rgb_color){ R, G, B }; colors5[i] = (rgb_color){ R, G, B }; colors6[i] = (rgb_color){ R, G, B }; colors7[i] = (rgb_color){ R, G, B }; } led0.write(colors0, LED_COUNT); led1.write(colors1, LED_COUNT); led2.write(colors2, LED_COUNT); led3.write(colors3, LED_COUNT); led4.write(colors4, LED_COUNT); led5.write(colors5, LED_COUNT); led6.write(colors6, LED_COUNT); led7.write(colors7, LED_COUNT); } } void ModeSelect(int mode) { switch(mode) { case 0 : led.detach(); break; case 1 : led.detach(); R = 119; G = 66; B = 255; led.attach(&LedOn1, 0.05); break; case 2 : led.detach(); R = 119; G = 66; B = 255; led.attach(&LedOn2, 0.05); break; case 3 : led.detach(); R = 119; G = 66; B = 255; led.attach(&LedOn3, 0.05); break; case 4 : led.detach(); R = 119; G = 66; B = 255; led.attach(&MoonPhase, 0.05); break; } }