Menu
CoddyTech

Einen Taster entprellen

Teil des Abschnitts Eingaben der Arduino-Journey von Coddy. Lektion 6 von 22.

Der Taster in dieser Lektion ist ein echter Taster, und der Starter ist dein Zähler aus der letzten Lektion. Starte ihn und drücke den Taster einmal: Der Zähler springt um mehr als eins nach oben.

Im Inneren eines Tasters berühren sich zwei Metallkontakte. Wenn sie aufeinandertreffen, prellen sie: Etwa eine Millisekunde lang treffen sie aufeinander, federn auseinander und treffen erneut aufeinander. Beim Loslassen passiert dasselbe. loop() liest den Pin während dieser Millisekunde viele Male aus und zählt jedes Prellen als Tastendruck.

Die Lösung heißt Entprellen: Wenn sich der Messwert ändert, reagiere einmal darauf und warte dann etwa 20 ms, bis sich die Kontakte beruhigt haben, bevor du erneut ausliest. 20 ms bemerkt man nicht.

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

Warte nach jeder Änderung, nicht nur nach einem Tastendruck: Auch beim Loslassen prellt der Taster, und jedes Prellen auf dem Rückweg sieht wie ein neuer Tastendruck aus.

challenge icon

Aufgabe

Mittel

Repariere den Zähler, sodass jeder Tastendruck einmal gezählt wird:

  • wenn reading sich von lastReading unterscheidet, zähle ihn, wenn es ein Tastendruck ist (LOW), und warte dann 20 ms
  • speichere lastReading weiterhin am Ende von loop()

Klicke auf Run, drücke die Taste ein paar Mal und beobachte den Zählerstand, dann klicke auf Check.

Probier es selbst

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 iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Eingaben

Übe selbstständig: Arduino-Playground