Bonjour à tous, je viens de recevoir mon ruban de leds programmable WS2812b 1m avec 30 NéoPixels
je commence à faire joujou avec, donc je partage mes premières fonctions si ça peut servir à d'autre:
#include <Adafruit_NeoPixel.h>
#define PIN 6 // broche 6
#define nbled 30 // nombre de led du ruban
Adafruit_NeoPixel led = Adafruit_NeoPixel(nbled, PIN, NEO_GRB + NEO_KHZ800);
unsigned long t0,t1=0,t2=0,t3=0,t4=0; // toutes les tempos
byte a,b,p=0; // sert au calcul dans les anim
int d=1,e; // direction des anim
uint32_t c;
void setup() {
led.begin();
}
//***************************** loop *********************************
void loop() {
t0=millis(); // mémorise le temps
// e=analogRead(A0); // lecture du potard
if (t0>t3) {p=random(9); t3=t0+10000; t1=0; a=1;} // change le programme toutes les 10 secondes
// if (e) p=0; // si utilisation du potard
switch (p) {
case 0: { prog0(1000); break; } // potard
case 1: { prog1(100); break; } // 50 = temps de changement de led
case 2: { prog2(50); break; } // 20 = vitesse de déplacement
case 3: { prog3(500); break; } // 500 = vitesse de changement
case 4: { prog4(100); break; } // 50 = vitesse de déplacement
case 5: { prog5(100); break; } // 10 = vitesse de déplacement
case 6: { prog6(10); break; } // 10 = vitesse de déplacement
case 7: { prog7(10); break; } // 10 = vitesse de déplacement
case 8: { prog8(1000); break; } // 10 = vitesse de déplacement
case 9: { prog9(100); break; } // 1000 = explosion toutes les seconde
}
led.show();
}
//**************************** animation 0 ************************** potard
void prog0(int t) {
if (t0>t2) {c=random(0x1000000); t2+=t;} // choix d'une couleur aléatoire
a=map(e,0,1023,0,30);
led.setPixelColor(a,c);
t3=0;
if (t0>t1) degrad(10);
}
//**************************** animation 1 ************************** led aléatoires
void prog1(int t) {
if (t0>t2) {
c=random(0x1000000); // choix d'une couleur aléatoire
led.setPixelColor(random(nbled),c); // allume une led au hasard
t2=t0+t; }
if (t0>t1) degrad(20); // 20= durée d'extinction des leds
}
//**************************** animation 2 ************************** balayage D/G
void prog2(int t) {
uint32_t c=random(0x1000000); // choix d'une couleur aléatoire
if (t0>t2) {
led.setPixelColor(a,c);
a=a+d; if(a>=nbled) d=-1; if(a<=0) d=1;
t2=t0+t;}
if (t0>t1) degrad(10); // 10= durée d'instinction des leds
}
//**************************** animation 3 ************************** led Bleu blanche rouge
void prog3(int t) {
if (t0>t2) {
a=random(nbled/3)*3;
led.setPixelColor(a,0,0,255); led.setPixelColor(a+1,0xFFFFFF); led.setPixelColor(a+2,255,0,0); // bleu blanc rouge
t2=t0+t;}
if (t0>t1) degrad(30); // 20= durée d'exteinction des leds
}
//**************************** animation 4 ************************** balayage à droite
void prog4(int t) {
c=random(0x1000000); // choix d'une couleur aléatoire
if (t0>t2) {
led.setPixelColor(a,c);
a++; if(a>=nbled) a=0;
t2=t0+t;}
if (t0>t1) degrad(30); // 5= durée d'instinction des leds
}
//**************************** animation 5 ************************** balayage à droite
void prog5(int t) {
c=random(0x1000000); // choix d'une couleur aléatoire
if (t0>t2) {
led.setPixelColor(a,c);
a--; if(a<=0) a=nbled;
t2=t0+t;}
if (t0>t1) degrad(30); // 5= durée d'instinction des leds
}
//**************************** animation 6 ************************** balayage rapide à gauche
void prog6(int t) {
c=random(0x1000000); // choix d'une couleur aléatoire
if (t0>t2) {
led.setPixelColor(a,0);
if(a==0) a=nbled+1;
a--;
led.setPixelColor(a,c);
t2=t0+t;}
}
//**************************** animation 7 ************************** balayage rapide à gauche
void prog7(int t) {
c=random(0x1000000); // choix d'une couleur aléatoire
if (t0>t2) {
led.setPixelColor(a,0);
if(a==nbled) a=1;
a++;
led.setPixelColor(a,c);
t2=t0+t;}
}
//**************************** animation 8 ************************** explosion D & G
void prog8(int t) {
if (t0>t2) {
c=random(0x1000000); // choix d'une couleur aléatoire
a=random(nbled);
b=1;t4=t0+200; // tempo vitesse éclatement
led.setPixelColor(a,c);
t2=t0+t; }
if (t0>t4){
if (b<7) {led.setPixelColor(a+b,c);led.setPixelColor(a-b,c); b++;}
t4=t0+50;
}
if (t0>t1) degrad(10);
}
//**************************** animation 9 ************************** led Bleu blanche rouge décal
void prog9(int t) {
if (t0>t2) {
a++; if(a>nbled) a=0;
led.setPixelColor(a,0,0,255); led.setPixelColor(a+1,0xFFFFFF); led.setPixelColor(a+2,255,0,0); // bleu blanc rouge
t2=t0+t;}
if (t0>t1) degrad(10); // 20= durée d'exteinction des leds
}
//******************************** dégrade les leds allumées les éteint en douceur *********************************
void degrad(int t){ // t détermine la vitesse d'extinction des leds
for(int i=0; i<nbled; i++) {
uint32_t c = led.getPixelColor(i); // extraction des couleurs
byte r = c / 0x10000;
byte v = ( c & 0xFF00)/0x100;
byte b = c & 0xFF;
led.setPixelColor(i,r/1.05,v/1.05, b/1.05); // baisse la luminosité des leds
}
t1=t0+t; // initialise t1
}