1 pièce(s) jointe(s)
Jeu du parcours électrique : problème faux positifs
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.
Pièce jointe 473091
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:
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);
}
}
} |