Due LED, due velocità
Fa parte della sezione Temporizzazione senza delay del percorso Arduino di Coddy. Lezione 4 di 18.
Con delay(), far lampeggiare due LED a velocità diverse è un rompicapo: ogni attesa blocca l'altro LED. Con millis() è facile, perché non si aspetta mai.
Assegna a ogni attività le proprie variabili: il proprio ultimo orario e il proprio stato. Poi assegna a ogni attività il proprio if in loop(). A ogni ciclo, ciascuna attività controlla il proprio orologio e agisce solo quando è arrivato il momento:
unsigned long redPrevious = 0;
unsigned long greenPrevious = 0;
void loop() {
unsigned long now = millis();
if (now - redPrevious >= 500) {
redPrevious = now;
// cambia lo stato del LED rosso
}
if (now - greenPrevious >= 200) {
greenPrevious = now;
// cambia lo stato del LED verde
}
}Le due attività non si intralciano mai. Puoi aggiungerne una terza e una quarta allo stesso modo: un insieme di variabili e un if ciascuna.
Non condividere mai una sola variabile dell'ultimo orario tra due attività. L'attività più veloce la reimposta così spesso che quella più lenta non raggiunge mai il proprio intervallo.
Sfida
FacileIl LED rosso sul pin 13 si accende e si spegne già ogni 500 ms. Fai in modo che il LED verde sul pin 12 si accenda e si spenga ogni 200 ms contemporaneamente:
- aggiungi le variabili
greenPreviousegreenState - aggiungi un secondo
ifinloop()per il LED verde
Premi Esegui e osserva entrambi lampeggiare, poi Verifica.
Provalo tu
const int redLed = 13;
const int greenLed = 12;
unsigned long redPrevious = 0;
int redState = LOW;
// aggiungi qui le due variabili del LED verde
void setup() {
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
}
void loop() {
unsigned long now = millis();
// il LED rosso cambia stato ogni 500 ms
if (now - redPrevious >= 500) {
redPrevious = now;
if (redState == LOW) {
redState = HIGH;
} else {
redState = LOW;
}
digitalWrite(redLed, redState);
}
// fai cambiare stato al LED verde ogni 200 ms qui
}
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