Bonjour à tous,
Je travaille en ce moment sur un programme de chenillard un peu particulier:
L'objectif est qu'en appuyant sur un bouton on déclenche un chenillard de 8 LEDs qui ne tourne pas en boucle mais qu'une fois. Et en appuyant de nouveau que le précédant chenillard soit finit ou non, ça enverrait une nouvelle vague et ceci sans interrompre la ou les vagues précédente.
il y a une démo sur cette page web suivante à PROJET2:
http://guillaumeroux.fr/Enseignement/ESME/IngéSUP/ApplicationsAlgorithmique/
J'ai déjà ce programme qui marche plutôt bien mais j'ai un problème sur la fonction interrupteur.
int LED[8]={13,12,11,10,9,8,7,6};
int BOUTON=2;
int entier=0;
int puissancede2[8]={128,64,32,16,8,4,2,1};
volatile int pression = 0;
void setup()
{
for(int i=0;i<8;i++)
{
pinMode(LED[i],OUTPUT);
}
pinMode(BOUTON, OUTPUT);
attachInterrupt(0,blink,RISING);
}
void loop()
{
boolean etat = digitalRead(BOUTON);
if (pression > 0)
{
entier = entier + 1;
}
if (entier >= 256)
{
entier = entier - 256;
}
int entier2 = entier;
for(int i=0;i<8;i++)
{
if (entier2 >= puissancede2[i])
{
digitalWrite(LED[i],HIGH);
entier2 = entier2 - puissancede2[i];
}
else
{
digitalWrite(LED[i],LOW);
}
}
entier = entier * 2;
pression = 0;
delay(2000);
}
void blink()
{
pression = pression + 1;
}
sur ce code j'ai utilisé le binaire pour faire allumer mes LEDs:
- pour lancer une nouvelle vague j'ajoute +1 à un entier que je convertis en binaire : 0 la led est éteinte et 1 la LED est allumé.
- pour décaler les LEDs, je multiplie l'entier par x2.
Maintenant mon problème ce situe sur ma fonction interrupteur.
Quand j'appuie en continue sur mon bouton, le décalage s’effectue toujours mais l'ajout ne marche plus.
Comment faire?
J'avais aussi essayé la fonction millis() sans succès...
Aussi sur la démo on le voit bien mais quand j'appuie sur mon bouton la première LED devrait s'allumer si elle est éteinte mais chez moi, il faut attendre la fin du delay(2000) pour que la LED s'allume.
Merci de votre aide