Bonjour à tous.
J'ai un projet de réaliser un rond en LEDs avec plusieurs animations (tout allumé, allumage et arrêt progressif, clignotement du rond, chenillard et arrêt). Ces états seront sélectionnés par pression d'un bouton, une variable servant à garder en mémoire quel bouton a été actionné.
Ainsi le bouton relâché, la variable reste en mémoire et l'animation continue jusqu'à l'activation d'un autre bouton ou l'arrêt de l'Arduino.
J'ai réussi à coder 4 états mais je peine à programmer l'allumage simultané et progressif de toutes les LEDs puis leurs arrêts progressifs. J'ai déjà fouillé sur le forum et google, et je vous avoue que les tutos du style "allumage progressif de LEDs pour un escalier" ne m'aident pas.
Voici le code et une image de mon projet réalisé sur un site
int state = 0; // pour commencer avec tout éteins
int start = 49; //bouton pour allumer leds
int progr = 50; //Allumage progressif de toutes les leds
int clign = 51; //clignotement de toutes leds
int rond = 52; //fait tourner les leds en rond via clignotement
int Stop = 53; //arret des leds
int sta, pro, cli, ron, sto = 0;
int leds[] = {2,3,4,5,6,7,8,9,10,11}; //Sur des broches PWM
int brightness = 0;
void setup() {
for(int i=0; i<10; i++) {
pinMode(leds[i], OUTPUT);
}
pinMode(start,INPUT); //start
pinMode(progr,INPUT); //progressif
pinMode(clign,INPUT); //clignotement
pinMode(rond,INPUT); //clignoter en rond
pinMode(Stop,INPUT); //stop
}
void loop() {
state = state;
sta = digitalRead(start);
pro = digitalRead(progr);
cli = digitalRead(clign);
ron = digitalRead(rond);
sto = digitalRead(Stop);
if(sta==HIGH){
state = 1;
}
else if(pro==HIGH){
state = 2;
}
else if(cli==HIGH){
state = 3;
}
else if(ron==HIGH){
state = 4;
}
else if(sto==HIGH){
state = 0;
}
switch(state){
case 0: //tout éteind
for(int i=0; i<10; i++) {
digitalWrite(leds[i], LOW);
}
break;
case 1: //tout allumé
for(int i=0; i<10; i++) {
digitalWrite(leds[i], HIGH);
}
break;
case 2: //allumage progressif de toutes les leds
for(int i=0; i < 10; i++) {
for(brightness <= 0; brightness >= 255; brightness+5) {
analogWrite(leds[i], brightness);
delay(30);
}
if (brightness <= 0 || brightness >= 255){
for(int i=0; i<10; i++) {
analogWrite(leds[i], brightness);
brightness = brightness -5;
delay(30);
}
}
}
break;
case 3: //clignotement de toutes les leds
for(int i=0; i<10; i++) {
digitalWrite(leds[i], HIGH);
}
delay(60);
for(int i=0; i<10; i++) {
digitalWrite(leds[i], LOW);
}
delay(60);
break;
case 4: //allumage des leds en tournant
if (leds[0] || leds[2] || leds[4] || leds[6] || leds[8] == HIGH){
//on éteins toutes les leds avant de lancer l'animation
for(int i=0; i<10; i++) {
digitalWrite(leds[i], LOW);
}
}
for(int i=0; i<10; i++) {
digitalWrite(leds[i], HIGH);
delay(30);
digitalWrite(leds[i], LOW);
if (state==1 || state ==2 || state==3 || state==0)break; //pour sortir de la boucle for
}
break;
}// fin Switch
} //fin void loop
Attention dans l'image qui suit, j'ai volontairement oublié les résistances aux LEDs pour la clarté, mais dans mon projet elles sont là.
J'ai testé l'imbrication de 2 boucles for comme dans l'exemple ci-dessus, une boucle while (brightness >= 255) combinée avec une boucle for pour appliquer la variable brightness au LEDs (qui augmentait ou diminuait comme dans l'exemple ci-dessus) mais cela ne fonctionne pas, et 2-3 autres trucs dont je ne m'en souviens plus vu que c'était un échec.
Quelle(s) solution(s) est(sont) à envisager? Merci d'avance pour votre aide.