Dans ton code, les deux tempo n'ont aucune raison d'être liées.
Par contre, tu n'as pas écrit exactement le même code pour les deux led
Par commodité, je vais le réécrire avec un tableau (ça m'épargne le copié collé)
Je vais le modifier sensiblement (commentaires, types de données, …), en effet, je ne comprends rien au code, et les commentaires expriment le contraire de ce que tu viens de me décrire. (Et ils ne me semblent pas cohérents avec le code)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 | #define NB_LED 2
//les boutons sont connectés aux broche 2 et 8 de la carte Adruino
const int bouton[NB_LED] = {2, 8};
//les LED aux broches 13 et 3
const int led[NB_LED] = {13, 3};
//dernier instant où on a vu le bouton pressé
unsigned long pression[NB_LED] = {0};
#define SEUIL 5000
void setup()
{
int i; //un itérateur pour appliquer la fonction à chaque bouton
for(i=0; i<NB_LED; i++)
{
pinMode(led[i], OUTPUT); //la led est une sortie
digitalWrite(led[i],HIGH);
pinMode(bouton[i], INPUT); //le bouton est une entrée
}
}
void loop()
{
int etatBouton;
int i; //un itérateur pour appliquer la fonction à chaque bouton
//On fait donc le même travail pour chaque LED
for(i=0; i<NB_LED; i++)
{
etatBouton = digitalRead(bouton[i]); //On lit le bouton
if(etatBouton == HIGH) //Si le bouton est pressé
{
//On allume la LED
digitalWrite(led[i],LOW);
//Et on retient la de la pression sur le bouton
pression[i] = millis();
}
else //Le bouton est relâché
{
//Si le bouton n'a pas été pressé depuis SEUIL
if((millis()-pression[i])> SEUIL)
{
//On éteint la LED
digitalWrite(led[i],HIGH);
}
//Et sinon, on laisse la diode allumée, ou éteinte si on vient de lancer le programme
}
}
}
|
Je pense que tes problèmes sont, entre autres, liés au fait que tu utilises un int
pour enregistrer les résultats de millis()
, ce qui va te poser des problèmes dès 32s après le démarrage de l'arduino (sachant que tes tempos sont de 15s, tu vas vite tomber dans ce cas).
Dans l'ensemble, cependant, je pense que tu ne comprends pas vraiment ce que fait le programme. Evite de commenter en parlant d'état logique haut et bas, c'est déjà ce qui est écrit dans le code. Ne décrit pas le code, explique ce qu'il fait. Dans mon code, j'ai par exemple if(etatBouton == HIGH) //Si le bouton est pressé
, le code dit "état logique haut", et le commentaire dit "bouton pressé". Si je me suis trompé, que la pin est à l'état bas quand le bouton est pressé, on s'en rend compte facilement, et c'est facile à corriger; en plus de ça, on comprends beaucoup mieux le comportement attendu, les réactions aux pressions sur les boutons, etc…