Menu
CoddyTech

Anti-rebond d’un bouton

Fait partie de la section Entrées du Journey Arduino de Coddy. Leçon 6 sur 22.

Le bouton de cette leçon est bien réel, et le projet de départ est votre compteur de la leçon précédente. Lancez-le et appuyez une fois sur le bouton : le compteur augmente de plus d’une unité.

À l’intérieur d’un bouton, deux contacts métalliques se touchent. Lorsqu’ils se rencontrent, ils rebondissent : pendant environ une milliseconde, ils se touchent, s’écartent sous l’effet du ressort et se touchent de nouveau. Le relâchement produit le même effet. loop() lit la broche de nombreuses fois pendant cette milliseconde et compte chaque rebond comme un appui.

La solution s’appelle l’anti-rebond : lorsque la lecture change, agissez une seule fois, puis attendez environ 20 ms que les contacts se stabilisent avant de lire à nouveau. Une personne ne remarque jamais 20 ms.

if (reading != lastReading) {
  if (reading == LOW) {
    presses++;
    Serial.println(presses);
  }
  delay(20);
}
lastReading = reading;

Attendez après chaque changement, et pas seulement après un appui : le relâchement rebondit aussi, et chaque rebond lors du retour à l’état haut ressemble à un nouvel appui.

challenge icon

Défi

Moyen

Corrigez le compteur pour que chaque pression soit comptée une seule fois :

  • lorsque reading est différent de lastReading, comptez-le s’il s’agit d’une pression (LOW), puis attendez 20 ms
  • continuez à enregistrer lastReading à la fin de loop()

Cliquez sur Run, appuyez plusieurs fois sur le bouton et observez le compteur, puis cliquez sur Check.

Essayez vous-même

const int buttonPin = 2;

int presses = 0;
int lastReading = HIGH;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {
  int reading = digitalRead(buttonPin);
  if (reading == LOW && lastReading == HIGH) {
    presses++;
    Serial.println(presses);
  }
  lastReading = reading;
}
quiz iconTestez-vous

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