Problème de récupération d'input pendant une boucle FOR

Salut,
J'ai fait une boucle qui allume des LEDS sans aucune condition.
La boucle ressemble à ça :

For (i = 1 ;i<=10;i++)
{
digitalWrite(led[i], HIGH);         // J'allume la led i
EtatInput1 = digitalread(Input1); // je récupère l'état du push bouton (ouvert ou fermé)
Serial.print(EtatInput1);
delay (200)                            // J'attends 200 ms
digitalWrite(led[i], LOW);        // J'éteins la led i
}

For (i = 9 ;i>=1;i--)
{
digitalWrite(led[i], HIGH);         // J'allume la led i
EtatInput1 = digitalread(Input1); // je récupère l'état du push bouton (ouvert ou fermé)
Serial.print(EtatInput1);
delay (200)                            // J'attends 200 ms
digitalWrite(led[i], LOW);        // J'éteins la led i
}

Voilà mon souci :
Quand j'appuie sur le bouton, ma valeur EtatInput1 passe à 0.
Même si j'appuie et relache le bouton très rapidement, cette valeur reste à 0 pendant plusieurs tours de boucle aulieu de revenir à 1 (valeur quand il est relaché).
Auriez vous une idée du pourquoi de la chose ?

Merci pour votre aide !

Même si j'appuie et relache le bouton très rapidement,

La notion de rapidement est très subjective. Avec une temporisation de 100ms par boucle un appui rapide peut facilement durer 2 ou 3 tours de boucle voir plus si on compte le temps de rebond des contacts.

Je viens de compléter mon code (mes leds s'allument dans un sens, puis dans l'autre).
Concernant les délais, je suis monté à 200 ms pour l'allumage des leds et rajouté un delai de 10 secondes pour la lecture de l'état de mon bouton, mais ça ne change rien.

En fait j'ai l'impression que je ne comprends pas ton problème.
Tu lis l'état de l'interrupteur toutes les 200ms (à chaque itération des 2 boucles) mais tu ne prends cet état en compte qu'une fois sur 20. Je ne vois pas où est le problème.

Il faut placer le code entre les balises code (bouton # au dessus de la fenêtre de saisie) ce qui le rend plus lisible.

Il y a bien une résistance de pullup sur ton bouton?

Mon souci c'est qu'avec ce code, je m'attends à ce que l'état du bouton que je lis avec le serial.print repasse à 1 (relaché) dès que je n'appuie plus sur le bouton.

En gros si je mets un delay à 300 ms, voilà ce qui va se passer sur l'état de mon bouton que je lis les valeurs.
1 // J'ai relaché
1 // J'ai relaché
1 // J'ai relaché
0 // J'appuie
0 // j'ai relaché => Problème, ça devrait être à 1
1 // J'ai relaché
1 // J'ai relaché
1 // J'ai relaché
etc...

Ca c'est déjà un souci, mais si je baisse mon delay à 100 ms, c'est pire.
1 // J'ai relaché
1 // J'ai relaché
1 // J'ai relaché
0 // J'appuie
0 // j'ai relaché => Problème, la valeur devrait être à 1
0 // J'ai relaché => Problème, la valeur devrait être à 1
0 // J'ai relaché => Problème, la valeur devrait être à 1
1 // J'ai relaché

Il y a un gros lag entre le moment ou je relache et où la valeur lue par l'arduino est correcte.
Par contre quand j'appuie sur le bouton, la valeur est bien lue au bon moment.

Je n'ai pas mis de résistance de Pull up effectivement...

ps : j'ai modifier mon msg initial pour mettre la balise de code et virer la condition if qui n'est pas à mon avis la source du pb

Je n'ai pas mis de résistance de Pull up effectivement...

Je pense que ton problème vient de là. La broche met un certain temps à retrouver un état stable. A minima utilises le pullup intégré dans les IO.
si tu utilises l'IDE 1.0 ou supérieur

pinMode(INPUT_PULLUP);

si tu utilises une version de l'IDE antérieure à 1.0

pinMode(INPUT);
digitalWrite(HIGH);

Merci, je vais tester ça ce soir en rentrant du taf :slight_smile:

Ca marche nickel !
1000 fois merci !!!!!