Pages: [1]   Go Down
Author Topic: Problème de récupération d'input pendant une boucle FOR  (Read 765 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut,
J'ai fait une boucle qui allume des LEDS sans aucune condition.
La boucle ressemble à ça :
Code:
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 !
« Last Edit: November 27, 2012, 03:56:46 am by minooye » Logged

France
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3010
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
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.
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

France
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3010
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
« Last Edit: November 27, 2012, 03:41:34 am by fdufnews » Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: November 27, 2012, 03:57:39 am by minooye » Logged

France
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3010
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
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
Code:
pinMode(INPUT_PULLUP);

si tu utilises une version de l'IDE antérieure à 1.0
Code:
pinMode(INPUT);
digitalWrite(HIGH);
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci, je vais tester ça  ce soir en rentrant du taf  smiley
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Pages: [1]   Go Up
Jump to: