Bonjour.
Pour la fête d'anniversaire de mon fils, je fabrique le célèbre jeu du parcours en fil tordu avec l'anneau.
L'idée est simple : la led verte est allumée. si le contact est fait entre l'anneau et le parcours (contact rouge - jaune), la led verte, s'éteint, la led rouge s'allume et reste allumée (même si l'anneau ne touche plus).
Le buzzer émet un son puis s'éteint si l'anneau ne touche plus.
L'appui bref sur le bouton poussoir fait un raz (la led rouge s'éteint, la verte s'allume).
Seulement, j'ai très souvent des faux positifs dès que le circuit est alimenté. Le pin 2 détecte un HIGH même sans contact. J'ai pourtant ajouté des résistances de 220ohm (pull down) et testé avec du 10k. Mais rien n'y fait.
Il suffit de toucher du doigt l'isolant du câble qui va au pin 2 pour déclencher un HIGH
Comment puis-je m'en sortir ? Voici mon code. Merci !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
51
52
53
54
55
56
57
58
59
60
61
62
63 const int buzzer=13; const int ledVerte=9; const int ledRouge=8; const int bouton=7; const int filDeFer=5; boolean etatBouton; boolean ancienEtatBouton; boolean etatFilDeFer; void setup() { Serial.begin(9600); pinMode(buzzer, OUTPUT); pinMode(ledVerte, OUTPUT); pinMode(ledRouge, OUTPUT); pinMode(filDeFer, INPUT); pinMode(bouton, INPUT_PULLUP); etatBouton = HIGH; ancienEtatBouton = HIGH; etatFilDeFer = LOW; digitalWrite(ledVerte, HIGH); digitalWrite(ledRouge, LOW); } void loop() { boolean etatBouton=digitalRead(bouton); boolean etatFilDeFer=digitalRead(filDeFer); Serial.println(etatBouton); if (etatBouton == LOW && ancienEtatBouton == HIGH) { Serial.println("bouton presse"); ancienEtatBouton = LOW; delay(500); } else if (etatBouton == HIGH && ancienEtatBouton == LOW) { Serial.println("bouton relache"); digitalWrite(ledVerte, HIGH); digitalWrite(ledRouge, LOW); noTone(buzzer); ancienEtatBouton = HIGH; delay(500); } else { if (etatFilDeFer == HIGH) { digitalWrite(ledVerte, LOW); digitalWrite(ledRouge, HIGH); tone(buzzer, 500); delay(500); noTone(buzzer); } else { delay(500); } } }
Partager