Cronometro con pulsante
Fa parte della sezione Temporizzazione senza delay del percorso Arduino di Coddy. Lezione 18 di 18.
Un cronometro ha due stati, in esecuzione e fermo, e una pressione lo fa passare dall'uno all'altro. Misura il tempo nel modo sicuro: memorizza millis() all'inizio, sottrai alla fine.
if (!running) {
running = true;
startTime = millis();
} else {
running = false;
Serial.println(millis() - startTime);
}Il pulsante viene sottoposto a debounce come per il pulsante di modalità: intervieni quando la lettura cambia, poi attendi 20 ms. Entrambe le pressioni attendono gli stessi 20 ms, così il tempo tra loro rimane corretto.
Il LED mostra lo stato: è acceso mentre il cronometro è in esecuzione.
Sfida
MedioIl pulsante viene già letto e il rimbalzo viene già gestito, e onPress() viene eseguita una volta per ogni pressione. Scrivi onPress():
- se il cronometro non è in funzione: avvialo, memorizza
millis()instartTimee accendi il LED - se è in funzione: fermalo, spegni il LED e stampa il tempo in millisecondi
Premi Run, premi il pulsante due volte, poi Check.
Provalo tu
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);
}
// Chiamata una volta per ogni pressione.
void onPress() {
// running è false: avvia, memorizza l'istante, accendi il LED
// running è true: ferma, spegni il LED, stampa il tempo in ms
}
void loop() {
bool pressed = digitalRead(buttonPin) == LOW;
if (pressed != wasPressed) {
if (pressed) {
onPress();
}
wasPressed = pressed;
delay(20); // lascia stabilizzare i contatti
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Temporizzazione senza delay
Esercitati da solo: Playground Arduino