Lampeggiare mentre un pulsante cambia stato
Fa parte della sezione Temporizzazione senza delay del percorso Arduino di Coddy. Lezione 5 di 18.
Uno sketch che non aspetta mai può controllare un pulsante ed eseguire un lampeggio allo stesso tempo. Ogni ciclo dura pochi microsecondi, quindi la scheda controlla il pulsante migliaia di volte al secondo e rileva anche una pressione molto breve.
Il lampeggio segue lo schema di millis(). Il pulsante usa il controllo del fronte della sezione Inputs: agisci quando il pulsante è premuto adesso e non era premuto nel ciclo precedente. ! significa "non", quindi !wasPressed si legge "non era premuto".
bool wasPressed = false;
void loop() {
// il lampeggio: if (now - previous >= 500) { ... }
bool pressed = digitalRead(buttonPin) == LOW;
if (pressed && !wasPressed) {
// il pulsante è stato appena premuto
}
wasPressed = pressed;
}Inserisci entrambe le parti in loop(), una dopo l'altra, e non usare delay() in nessuna delle due. Se il lampeggio aspettasse 500 ms, una pressione che inizia e finisce durante l'attesa non verrebbe mai rilevata.
Sfida
MedioFai in modo che la scheda faccia due cose contemporaneamente:
- il LED rosso sul pin 13 si accende e si spegne ogni 500 ms, usando
millis()per il timing - ogni pressione del pulsante accende o spegne il LED giallo sul pin 12: acceso, poi spento, poi acceso
Un tocco rapido deve funzionare in qualsiasi momento, mentre tenere premuto il pulsante cambia lo stato del LED giallo una sola volta. Premi Run, tocca il pulsante, poi premi Check.
Provalo tu
const int redLed = 13;
const int yellowLed = 12;
const int buttonPin = 2;
void setup() {
pinMode(redLed, OUTPUT);
pinMode(yellowLed, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
// 1. commuta il LED rosso ogni 500 ms usando millis()
// 2. ogni pressione del pulsante accende o spegne il LED giallo
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Temporizzazione senza delay
1millis()
L'orologio millis()Tempi in unsigned longLampeggiare senza atteseDue LED, due velocitàLampeggiare mentre un pulsante cambia statoUna luce temporizzataEsercitati da solo: Playground Arduino