Stoppuhr mit Taster
Teil des Abschnitts Timing ohne Delay der Arduino-Journey von Coddy. Lektion 18 von 18.
Eine Stoppuhr hat zwei Zustände: laufend und angehalten. Ein Tastendruck versetzt sie vom einen in den anderen Zustand. Sie misst die Zeit auf sichere Weise: Speichere zu Beginn millis() und ziehe den Wert am Ende ab.
if (!running) {
running = true;
startTime = millis();
} else {
running = false;
Serial.println(millis() - startTime);
}Die Taste wird entprellt wie zuvor die Modustaste: Reagiere, wenn sich der Messwert ändert, und warte dann 20 ms. Bei beiden Tastendrücken wird dieselbe Zeit von 20 ms gewartet, sodass die Zeit dazwischen stimmt.
Die LED zeigt den Zustand an: Sie leuchtet, während die Stoppuhr läuft.
Aufgabe
MittelDie Taste wird bereits eingelesen und entprellt, und onPress() wird bei jedem Drücken einmal ausgeführt. Schreibe onPress():
- wenn die Stoppuhr nicht läuft: starte sie, speichere
millis()instartTimeund schalte die LED ein - wenn sie läuft: stoppe sie, schalte die LED aus und gib die Zeit in Millisekunden aus
Drücke Ausführen, drücke die Taste zweimal und klicke dann auf Überprüfen.
Probier es selbst
const int ledPin = 13;
const int buttonPin = 2;
bool wasPressed = false;
bool running = false;
unsigned long startTime = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
}
// Wird bei jedem Tastendruck einmal aufgerufen.
void onPress() {
// läuft nicht: starten, Zeit merken, LED einschalten
// läuft: stoppen, LED ausschalten, Zeit in ms ausgeben
}
void loop() {
bool pressed = digitalRead(buttonPin) == LOW;
if (pressed != wasPressed) {
if (pressed) {
onPress();
}
wasPressed = pressed;
delay(20); // Kontakte entprellen lassen
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Timing ohne Delay
Übe selbstständig: Arduino-Playground