Una luce temporizzata
Fa parte della sezione Temporizzazione senza delay del percorso Arduino di Coddy. Lezione 6 di 18.
Una luce delle scale si accende quando premi il suo pulsante e si spegne da sola poco dopo. Premilo di nuovo mentre è accesa e il tempo riparte da zero.
Servono due cose: il momento dell'ultima pressione e sapere se la luce è accesa. Memorizza il momento in un unsigned long quando il pulsante viene premuto:
if (digitalRead(buttonPin) == LOW) {
pressedAt = millis(); // avvia (o riavvia) il conteggio del tempo
lightOn = true;
digitalWrite(ledPin, HIGH);
}Poi, a ogni ciclo, controlla quanto tempo è passato:
if (lightOn && millis() - pressedAt >= onTime) {
lightOn = false;
digitalWrite(ledPin, LOW);
}Le due parti non attendono mai, quindi una pressione viene rilevata in qualsiasi momento, anche mentre la luce è già accesa. Con delay(2000) dopo la pressione, una seconda pressione durante l'attesa andrebbe persa.
Sfida
FacileRealizza una luce per le scale:
- una pressione accende subito il LED sul pin 13
- 2 secondi dopo la pressione, si spegne da sola
- una pressione mentre è accesa fa ripartire i 2 secondi
Premi Esegui, premi il pulsante alcune volte, poi Verifica.
Provalo tu
const int ledPin = 13;
const int buttonPin = 2;
const unsigned long onTime = 2000; // per quanto tempo la luce rimane accesa
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
// quando il pulsante è premuto: accendi il LED e memorizza l'istante
// quando è trascorso onTime da quell'istante: spegni il LED
}
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