Basculer à chaque pression
Fait partie de la section Entrées du Journey Arduino de Coddy. Leçon 4 sur 22.
Jusqu’à présent, la LED a copié le bouton : allumée quand on le maintient enfoncé, éteinte quand on le relâche. Un interrupteur de lampe fonctionne différemment : on appuie une fois pour allumer, puis une autre fois pour éteindre. C’est un basculement.
Pour basculer, le programme doit détecter le moment où le bouton s’enfonce : il est enfoncé maintenant, mais ne l’était pas la dernière fois que loop() s’est exécutée. Ce moment s’appelle un front. Conserve la dernière lecture dans une variable au-dessus de setup(), comme un compteur :
int lastReading = HIGH;
void loop() {
int reading = digitalRead(2);
if (reading == LOW && lastReading == HIGH) {
// le bouton a été enfoncé
}
lastReading = reading;
}Maintenir le bouton enfoncé garde la lecture à LOW, donc le front se produit une fois par pression, quelle que soit la durée pendant laquelle tu le maintiens.
Pour inverser un bool, utilise !, qui signifie « non » : ledOn = !ledOn; transforme true en false et inversement.
Défi
MoyenLe bouton est sur la broche 2 (INPUT_PULLUP) et la LED sur la broche 13. À chaque pression, inverse l’état de la LED :
- lorsque le bouton est enfoncé (
LOWmaintenant,HIGHla dernière fois), inverseledOn - enregistre la lecture dans
lastReadingà la fin deloop() - allume ou éteins la LED selon la valeur de
ledOn
Appuie sur Run, appuie quelques fois sur le bouton, puis sur Check.
Essayez vous-même
const int buttonPin = 2;
const int ledPin = 13;
bool ledOn = false;
int lastReading = HIGH;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
}
void loop() {
int reading = digitalRead(buttonPin);
// inverse ledOn lorsque le bouton est enfoncé
// mémorise cette lecture pour la prochaine fois
// allume ou éteins la LED selon la valeur de ledOn
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Entrées
Entraînez-vous par vous-même : Playground Arduino