Bonjour,
Je suis nouveau sur le forum, mais aussi dans la programmation ainsi que dans l'electronique!!!
Je vous présente donc mes plus plates excuses par avance si je n'utilise pas les bons termes.
Je suis en train de me faire un petit délir pour faire un ciel étoilé pour ma fille, je veux donc avoir une sequence d'eclairage de 5 LED suivant le numéro du programme que je souhaite "jouer", pour cela, je compte le nombre d'appuis sur le BP, et j'execute le prog correspondant!!!
Jusque là tout va bien.
mon soucis est que l'appuis sur le BP est bien pris en compte, mais il n'arréte le programme qu'à la fin de la "boucle" IF.
Je n'arrive pas à lui faire comprendre que je veux que celui ci change dés que j'ai appuyé sur le BP.
Je pense que ce n'est pas grand chose, mais je n'arrive pas à le mettre en place.
Pour info, je travail avec un Leonardo, et une plaquette d'essai.
Je suis certain que vous allez me trouver une solution, ou me donner des pistes!!!
Merci beaucoup.
Voici mon code ( en partie...):
/*composition de la plaquette d'essai:
5 LED de couleurs différentes, branchées sur les PIN 5, 6, 9, 10, 11 (PWM)
1 résistance sur chaque LED différentes suivant la couleur de la LED afin d'avoir un équilibre luminueux
1 Bouton poussoir branché sur PIN 2, avec une résistance 10K en sortie
un condensateur (104) pour éviter les effets rebonds
Arduino Leonardo pour le test et la mise en oeuvre du projet.*/
/* déclaration des constantes pour les noms des broches */
const int btn = 2;
const int led_0 = 5;
const int led_1 = 6;
const int led_2 = 9;
const int led_3 = 10;
const int led_4 = 11;
/* déclaration des variables utilisées pour connaitre le prog à lancer
Utilisation d'un condensateur 100nf en parallele sur le bouton pour éviter les effets rebond*/
int num_prog = 0; //le nombre qui sera incrémenté
int memoire_bt = LOW; //état relâché par défaut du bouton
int etat_bt; //lecture de l'état du bouton
int i = 0;
int j = 0;
int k = 0;
int l = 0;
int m = 0;
/* initilisation des broches en entrée/sortie */
void setup()
{
pinMode(btn, INPUT);
pinMode(led_0, OUTPUT);
pinMode(led_1, OUTPUT);
pinMode(led_2, OUTPUT);
pinMode(led_3, OUTPUT);
pinMode(led_4, OUTPUT);
attachInterrupt(1, pause, RISING);
}
void loop()
{
//lecture de l'état du bouton d'incrémentation
etat_bt = digitalRead(btn);
if((etat_bt != memoire_bt) && (etat_bt == LOW))
{
num_prog++; //on incrémente la variable qui indique le numéros du programme
}
if(num_prog > 9)
{
num_prog = 0;
}
memoire_bt = etat_bt; //on enregistre l'état du bouton pour le tour suivant
affiche(num_prog); // on affiche le bon programme
}
void pause() // fonction INTERRUPT
{
//lecture de l'état du bouton d'incrémentation
etat_bt = digitalRead(btn);
if((etat_bt != memoire_bt) && (etat_bt == LOW))
{
num_prog++; //on incrémente la variable qui indique le numéros du programme
}
if(num_prog > 9)
{
num_prog = 0;
}
memoire_bt = etat_bt; //on enregistre l'état du bouton pour le tour suivant
}
void affiche(int valeur_recue)
{
//on éteint toutes les leds
digitalWrite(led_0, LOW);
digitalWrite(led_1, LOW);
digitalWrite(led_2, LOW);
digitalWrite(led_3, LOW);
digitalWrite(led_4, LOW);
//Puis on lance le "prog" suivant le nombre d'appuis.
if(valeur_recue == 1)
{
digitalWrite(led_0, HIGH); //LED pleine puissance
digitalWrite(led_1, HIGH); //LED pleine puissance
digitalWrite(led_2, HIGH); //LED pleine puissance
digitalWrite(led_3, HIGH); //LED pleine puissance
digitalWrite(led_4, HIGH); //LED pleine puissance
}
if(valeur_recue == 2)
{
for (i = 45 ; i < 46; i++){ // boucle d'allumage de 0 à 254
analogWrite(led_0, i); // fixe la luminosité
analogWrite(led_1,i); // fixe la luminosité
analogWrite(led_2,i); // fixe la luminosité
analogWrite(led_3,i); // fixe la luminosité
analogWrite(led_4,i); // fixe la luminosité
delay(30); // pause pour laisser un temps de stabilisation
}
delay(1000);
for (i = 46 ; i > 45; i--){ // boucle d'allumage de 254 à 0
analogWrite(led_0, i); // fixe la luminosité
analogWrite(led_1, i); // fixe la luminosité
analogWrite(led_2, i); // fixe la luminosité
analogWrite(led_3, i); // fixe la luminosité
analogWrite(led_4, i); // fixe la luminosité
delay(30); // pause pour laisser un temps de stabilisation
}
}
if(valeur_recue == 3)
{
for (i = 0 ; i < 255; i++){ // boucle d'allumage de 0 à 254
analogWrite(led_0, i); // fixe la luminosité
analogWrite(led_1,i); // fixe la luminosité
analogWrite(led_2,i); // fixe la luminosité
analogWrite(led_3,i); // fixe la luminosité
analogWrite(led_4,i); // fixe la luminosité
delay(10); // pause pour laisser un temps de stabilisation
}
delay(1000);
for (i = 255 ; i > 0; i--){ // boucle d'allumage de 254 à 0
analogWrite(led_0, i); // fixe la luminosité
analogWrite(led_1, i); // fixe la luminosité
analogWrite(led_2, i); // fixe la luminosité
analogWrite(led_3, i); // fixe la luminosité
analogWrite(led_4, i); // fixe la luminosité
delay(2); // pause pour laisser un temps de stabilisation
}
}
if(valeur_recue == 4)
{
for (i = 0 ; i < 255; i++){ // boucle d'allumage de 0 à 254
analogWrite(led_0, i); // fixe la luminosité
delay(2); // pause pour laisser un temps de stabilisation
}
for (j = 0 ; j < 255; j++){ // boucle d'allumage de 0 à 254
analogWrite(led_1, j); // fixe la luminosité
delay(2); // pause pour laisser un temps de stabilisation
}
for (k = 0 ; k < 255; k++){ // boucle d'allumage de 0 à 254
analogWrite(led_2, k); // fixe la luminosité
delay(2); // pause pour laisser un temps de stabilisation
}
for (l = 0 ; l < 255; l++){ // boucle d'allumage de 0 à 254
analogWrite(led_3, l); // fixe la luminosité
delay(2); // pause pour laisser un temps de stabilisation
}
for (m = 0 ; m < 255; m++) { // boucle d'allumage de 0 à 254
analogWrite(led_4, m); // fixe la luminosité
delay(2); // pause pour laisser un temps de stabilisation
}
delay(1000);
for (i = 255 ; i > 0; i--){ // boucle d'allumage de 254 à 0
analogWrite(led_4, i); // fixe la luminosité
delay(2); // pause pour laisser un temps de stabilisation
}
for (j = 255 ; j > 0; j--){ // boucle d'allumage de 254 à 0
analogWrite(led_3, j); // fixe la luminosité
delay(2); // pause pour laisser un temps de stabilisation
}
for (k = 255 ; k > 0; k--){ // boucle d'allumage de 254 à 0
analogWrite(led_2, k); // fixe la luminosité
delay(2); // pause pour laisser un temps de stabilisation
}
for (l = 255 ; l > 0; l--){ // boucle d'allumage de 254 à 0
analogWrite(led_1, l); // fixe la luminosité
delay(2); // pause pour laisser un temps de stabilisation
}
for (m = 255 ; m > 0; m--) { // boucle d'allumage de 254 à 0
analogWrite(led_0, m); // fixe la luminosité
delay(2); // pause pour laisser un temps de stabilisation
}
digitalWrite(led_0, LOW);
digitalWrite(led_1, LOW);
digitalWrite(led_2, LOW);
digitalWrite(led_3, LOW);
digitalWrite(led_4, LOW);
delay(1000);
}