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.
Aufgabe
MittelRepariere den Zähler, sodass jeder Tastendruck einmal gezählt wird:
- wenn
readingsich vonlastReadingunterscheidet, zähle ihn, wenn es ein Tastendruck ist (LOW), und warte dann 20 ms - speichere
lastReadingweiterhin am Ende vonloop()
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;
}
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