Je suis ultra débutant en matière de codage arduino et de branchement, du coup histoire d'y aller doucement, je teste des trucs simples.
Je suis sur de l'Arduino nano V3, et je veux tester un des exemples, le 02.Digital->Button.
En gros, si on actionne un bouton connecté sur le pin D2, cela doit allumer la led 13 du nano.
Je simule le bouton avec 2 fils (une sur GND l'autre sur le pin D2) que je fais se toucher quand je veux allumer la led.
Seulement voilà, le nano réagit à l'envers, la led 13 s'allume quand on ne touche à rien, et quand je fais se toucher les fils, elle s'éteint.
J'ai fait le test avec 4 nanos, même résultat.
Il m'étonnerait que le code soit erroné, et que toutes les nanos soient défectueuses.
Donc où est-ce que je me trompe?
La simulation du bouton avec deux simples fils causerait le défaut?
Au cas où j'ai inversé les HIGH et les LOW pour voir, ça ne résout pas le problème, je n'y vois aucune logique.
Je suis un noob, mais cela ne doit pas être un soucis de téléversement, quand je teste le 01.Basic->Blink, ça fonctionne très bien.
Je ne vois rien d'anormal. La LED s'allume parce que l'entrée D2 est en l'air, donc elle capte tous les parasites environnants, et n'arrête pas d'osciller entre LOW et HIGH.
Lorsque l'on relie D2 à GND elle s'éteint car digitalRead(buttonPin) vaut LOW et dans ce cas on appelle digitalWrite(ledPin, LOW).
Un conseil : renseigne-toi sur : pinMode(buttonPin, INPUT_PULLUP);
// constants won't change. They're used here to set pin numbers:
const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 13; // the number of the LED pin
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}
void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed. If it is, the buttonState is HIGH:
if (buttonState == HIGH) {
// turn LED on:
digitalWrite(ledPin, HIGH);
} else {
// turn LED off:
digitalWrite(ledPin, LOW);
}
}
Vous avez un PB en utilisant l'exemple 02.Digital->Button. Si vous traduisez les explications en anglais au début du croquis vous pouvez lire :
Le circuit :
- LED fixée de la broche 13 à la terre à travers une résistance de 220 ohms
- bouton-poussoir attaché à la broche 2 à partir de +5V
- Résistance 10K fixée à la broche 2 depuis la terre
- Remarque: sur la plupart des Arduinos, il y a déjà une LED sur la carte
attaché à la broche 13.
Un lien vous amène vers le croquis du bouton poussoir.
l'exemple 02.Digital->Button met en œuvre un montage avec une résistance de pull-down. C'est à dire qu'une résistance de rappel de 10KOhms est utilisée pour amener l'entrée à la masse si l’interrupteur est ouvert. C'est l'inverse pour une résistance de pull-up qui peut être montée en externe mais qui existe également en interne d'où les explications de fdufnews et de hbachetti.
Comme ils vous l'expliquent le code change pour un pull-up interne :
1/ SETUP : pinMode(buttonPin, INPUT_PULLUP);
2/ dans la loop il faut inverser les LOW et HIGH bien sûr.
Voici le montage pour l'exemple 02.Digital->Button :
Ok, donc pour cet exemple le bouton fonctionnerait à l'inverse de ce que je pensais, quand on appuie dessus, en fait on rompt le passage de courant pour donner l'info.
Je suppose qu'il y a plusieurs type de bouton, donc plusieurs comportement possible.
Et pour que ça réagisse comme je le pensais, le INPUT_PULLUP est à ne pas oublier.
Oui, il y a plusieurs types de boutons, mais le plus courant (et de loin) est le bouton normalement ouvert et qui se ferme quand on appuie dessus.
Ça dépend surtout de la façon dont le bouton est câblé. Il faut que le programme soit en accord avec le câblage.
Comme l'a écrit @philippe86220 le programme que tu as utilisé correspond au câblage décrit dans les commentaires de ce programme.