control multi animation ledws2812 by usb serial com
Dependencies: PixelArray WS2812 mbed
Fork of WS2812_Example by
main.cpp
- Committer:
- exarkun
- Date:
- 2017-12-23
- Revision:
- 3:e59164341b18
- Parent:
- 2:cb82a3dc4031
File content as of revision 3:e59164341b18:
#include "mbed.h" #include "WS2812.h" #include "PixelArray.h" #include <time.h> #define WS2812_BUF 30//numbers of led // définition des sorties leds DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); DigitalOut led4(LED4); //declaration des leds visuelle utiliser pour mesurer le temps des taches DigitalOut myled1(LED1); DigitalOut myled2(LED2); DigitalOut myled3(LED3); DigitalOut myled4(LED4); // déclaration du hardware Serial pc(USBTX, USBRX);//utilisation de la liaison usb PixelArray px(WS2812_BUF); WS2812 ws(D9, WS2812_BUF, 5, 10, 10, 15); char c; //declaration des differantes taches void task1_switch(void); void task2_switch(void); void task3_switch(void); void task4_switch(void); //declaration des differantes interuption timer Ticker time_up1; //definition du Ticker, avec le nom “time_up1” Ticker time_up2; //definition du Ticker, avec le nom “time_up2” Ticker time_up3; //definition du Ticker, avec le nom “time_up3” Ticker time_up4; //definition du Ticker, avec le nom “time_up4” int random_color_position() { #define WS2812_BUF 30//numbers of led #define NUM_COLORS 1 #define NUM_LEDS_PER_COLOR 1 ws.useII(WS2812::PER_PIXEL); // use per-pixel intensity scaling while (1) { if(pc.readable()){c = pc.getc();} if(c=='0'){goto label;} //int colorbuf[NUM_COLORS] = {(rand()%256+0)};//random blue color int colorbuf[NUM_COLORS] = {(rand()%16777215+0)};//random color for (int i = 0; i < WS2812_BUF; i++) { px.Set(i, colorbuf[(i / NUM_LEDS_PER_COLOR) % NUM_COLORS]); } int k1=rand()%30+0;//random position1 int k2=rand()%30+0;//random position1 int k3=rand()%30+0;//random position1 int k4=rand()%30+0;//random position1 int k5=rand()%30+0;//random position1 int k6=rand()%30+0;//random position1 int k7=rand()%30+0;//random position1 int k8=rand()%30+0;//random position1 int k9=rand()%30+0;//random position1 int k10=rand()%30+0;//random position1 float time=rand()%1+0.001;//random time px.SetI(k1,rand()%0xff+0x00); px.SetI(k2,rand()%0xff+0x00); px.SetI(k3,rand()%0xff+0x00); px.SetI(k4,rand()%0xff+0x00); px.SetI(k5,rand()%0xff+0x00); px.SetI(k6,rand()%0xff+0x00); px.SetI(k7,rand()%0xff+0x00); px.SetI(k8,rand()%0xff+0x00); px.SetI(k9,rand()%0xff+0x00); px.SetI(k10,rand()%0xff+0x00); // Now the buffer is written, rotate it // by writing it out with an increasing offset for (int z=WS2812_BUF; z >= 0 ; z--) { ws.write_offsets(px.getBuf(),z,z,z); wait(time); } } label: } int deux_point_rouge_k2000() { #define WS2812_BUF 30//numbers of led #define NUM_COLORS 1 #define NUM_LEDS_PER_COLOR 1 ws.useII(WS2812::PER_PIXEL); // use per-pixel intensity scaling while (1) { if(pc.readable()){c = pc.getc();} if(c=='0'){goto label;} // for (int x = 0; x < 256; x++) { for (int y = 0; y < 31; y++) { int colorbuf[NUM_COLORS] = {0xf0000f};//random color //int colorbuf[NUM_COLORS] = {(rand()%256+0)};//random bleu color // for each of the colours (j) write out 10 of them // the pixels are written at the colour*10, plus the colour position // all modulus 60 so it wraps around for (int i = 0; i < WS2812_BUF; i++) { px.Set(i, colorbuf[(i / NUM_LEDS_PER_COLOR) % NUM_COLORS]); } // now all the colours are computed, add a fade effect using intensity scaling // compute and write the II value for each pixel int j=rand()%30+0; px.SetI(y,0xf0000f); px.SetI(30-y,0xf0000f); // Now the buffer is written, rotate it // by writing it out with an increasing offset for (int z=WS2812_BUF; z >= 0 ; z--) { ws.write_offsets(px.getBuf(),z,z,z); } } } } label: } int un_point_rouge_k2000() { #define WS2812_BUF 30//numbers of led #define NUM_COLORS 1 #define NUM_LEDS_PER_COLOR 1 ws.useII(WS2812::PER_PIXEL); // use per-pixel intensity scaling while (1) { if(pc.readable()){c = pc.getc();} if(c=='0'){goto label;} // for (int x = 0; x < 256; x++) { for (int y = 30; y > 0; y--) { int colorbuf[NUM_COLORS] = {0xff000f};//random color //int colorbuf[NUM_COLORS] = {(rand()%256+0)};//random bleu color // for each of the colours (j) write out 10 of them // the pixels are written at the colour*10, plus the colour position // all modulus 60 so it wraps around for (int i = 0; i < WS2812_BUF; i++) { px.Set(i, colorbuf[(i / NUM_LEDS_PER_COLOR) % NUM_COLORS]); } // now all the colours are computed, add a fade effect using intensity scaling // compute and write the II value for each pixel int j=rand()%30+0; px.SetI(y,0xff000f); // Now the buffer is written, rotate it // by writing it out with an increasing offset for (int z=WS2812_BUF; z >= 0 ; z--) { ws.write_offsets(px.getBuf(),z,z,z); } } for (int y = 0; y < 30; y++) { int colorbuf[NUM_COLORS] = {0xff000f};//random color //int colorbuf[NUM_COLORS] = {(rand()%256+0)};//random bleu color // for each of the colours (j) write out 10 of them // the pixels are written at the colour*10, plus the colour position // all modulus 60 so it wraps around for (int i = 0; i < WS2812_BUF; i++) { px.Set(i, colorbuf[(i / NUM_LEDS_PER_COLOR) % NUM_COLORS]); } // now all the colours are computed, add a fade effect using intensity scaling // compute and write the II value for each pixel int j=rand()%30+0; px.SetI(y,0xff000f); // Now the buffer is written, rotate it // by writing it out with an increasing offset for (int z=WS2812_BUF; z >= 0 ; z--) { ws.write_offsets(px.getBuf(),z,z,z); } } } } label: } int chainage_couleur() { #define WS2812_BUF 150 #define NUM_COLORS 6 #define NUM_LEDS_PER_COLOR 10 PixelArray px(WS2812_BUF); // See the program page for information on the timing numbers // The given numbers are for the K64F //WS2812 ws(D9, WS2812_BUF, 0, 5, 5, 0); WS2812 ws(D9, WS2812_BUF, 5, 10, 10, 15); ws.useII(WS2812::PER_PIXEL); // use per-pixel intensity scaling // set up the colours we want to draw with int colorbuf[NUM_COLORS] = {0x2f0000,0x2f2f00,0x002f00,0x002f2f,0x00002f,0x2f002f}; // for each of the colours (j) write out 10 of them // the pixels are written at the colour*10, plus the colour position // all modulus 60 so it wraps around for (int i = 0; i < WS2812_BUF; i++) { if(pc.readable()){c = pc.getc();} px.Set(i, colorbuf[(i / NUM_LEDS_PER_COLOR) % NUM_COLORS]); } // now all the colours are computed, add a fade effect using intensity scaling // compute and write the II value for each pixel for (int j=0; j<WS2812_BUF; j++) { if(pc.readable()){c = pc.getc();} // px.SetI(pixel position, II value) px.SetI(j%WS2812_BUF, 0xf+(0xf*(j%NUM_LEDS_PER_COLOR))); } // Now the buffer is written, rotate it // by writing it out with an increasing offset while (1) { if(pc.readable()){c = pc.getc();} if(c=='0'){goto label;} for (int z=WS2812_BUF; z >= 0 ; z--) { ws.write_offsets(px.getBuf(),z,z,z); wait(0.075); } } label: } void task1_switch() { myled1=1; if(pc.readable()) { c = pc.getc(); } myled1=0; } void task2_switch() { myled2=1; switch(c)//chargement des wafers dans tete { case '1'://impossible y as pas encore la precision demander c faut y as un probleme .!!!!!!!!!!!!!!!!!!!!!!!!!! random_color_position(); break; case '2': deux_point_rouge_k2000(); break; case '3': un_point_rouge_k2000(); break; case '4': chainage_couleur(); break; } myled2=0; } void task3_switch() { myled3=1; myled3=0; } void task4_switch() { myled4=1; myled4=0; } int main() { //lancement des tasks time_up1.attach(&task1_switch, 0.5); time_up2.attach(&task2_switch, 0.0005); time_up3.attach(&task3_switch, 0.5); time_up4.attach(&task4_switch, 0.5); //while(1) { // pc.printf("press key...\r\n"); //c=rand()%4+1;//random value } }