Leeleen:
Merci mais ça va pas...
J'allume et il me sort 1 allumage aléatoire et s'arrête.
A chaque appui et relâchement du bouton il me ressort 1 seul allumage, il ne boucle pas, il attend un appui/relâchement pour changer d'allumage.
Il ne change qu'au relâchement -> HIGH
J'ai même testé avec une résistance de pull-up , même résultat 1 appui/relâchement = 1 changement
Étrange...
Dans la boucle WHILE il faudrait pas relire la valeur de digitalRead(10) ?
justement, l'intéret de while c'est que ça relis constamment l'entrée : il lit la valeur et tant que la condition est vraie, il execute ce qui est entre les { }, soit ici rien, mais comme ça on a une attente tant que la condition est vraie.
j'ai considéré que ton bouton mettait à la masse la pin d'entrée lorsqu'il est appuyé. est-ce vraiment le cas ?
si au contraire il est entre la pin et le 5V, alors il faut inverser les HIGH et LOW dans le code.
sinon essayes avec le code suivant (juste quelques modifs dans la partie du bouton, pour rajouter des délais et éviter de sauter d'une condition à l'autre avec les rebonds du contact. Si ça ne marche toujours pas tu peux essayer en augmentant les délais entre les étapes, passer de 10 à 50 ou 100) :
if(digitalRead(10) == LOW); // LOW si bouton appuyé
{
delay(10); //un délai pour éviter de prendre en compte les rebonds du contact
while(digitalRead(10) == LOW)//on attends tant que le bouton n'a pas été relaché
{ }//on ne ne fait rien, on attends
delay(10); //un délai pour éviter de prendre en compte les rebonds du contact
//ici le bouton a été relaché
while(digitalRead(10) == HIGH)//maintenant le bouton à été relaché, on va attendre tant qu'il reste relaché
{ }//on ne ne fait rien, on attends
//ici il a été à nouveau appuyé
delay(10); //un délai pour éviter de prendre en compte les rebonds du contact
while(digitalRead(10) == LOW)//on attends tant que le bouton n'a pas été relaché
{ }//on ne ne fait rien, on attends
delay(100); //un délai pour éviter de prendre en compte les rebonds du contact lors de l'appel suivant de loop()
}
et sinon la version simplifiée, c'est juste appui sur le bouton = fige l'affichage, relacher = ça repart
dans ce cas tu utilises juste
while(digitalRead(10) == LOW)//si bouton activé on rentre dans la boucle
{ delay(10); }//on ne ne fait rien, on attends
Avec possibilité d'allonger le delay si tu veux que ça fasse une pause même en lâchant le bouton
toujours en partant du principe que bouton activé == LOW bien entendu si le bouton est entre la pin et le 5V il faut utiliser HIGH