Lampeggio di due led con periodo diverso
Lo schema elettrico proposto e il relativo sketch implementano il lampeggio di due led, uno con semiperiodo di 1 secondo e l'altro con semiperiodo di 750 millisecondi.
Si osserva come la gestione delle tempistiche con l'assenza della funzione delay() fa sì che questo algoritmo sia non-blocking
#define LED1 13 // LED1 collegato al pin digitale 13 #define LED2 12 // LED1 collegato al pin digitale 12 // Variabili globali unsigned long UltimoEventoLED1 = 0; // variabile di appoggio per il conteggio dei millisecondi da quando è avvenuto l'ultimo eventi nel LED1 unsigned long UltimoEventoLED2 = 0; // variabile di appoggio per il conteggio dei millisecondi da quando è avvenuto l'ultimo eventi nel LED2 unsigned long TempoCorrente = 0; // variabile di appoggio per il conteggio dei microsecondi int semiperiodoLED1 = 1000; // semiperiodo del LED1 in millisecondi int semiperiodoLED2 = 750; // semiperiodo del LED2 in millisecondi int lastStatoLED1 = 0; // ultimo stato del LED1 (per ora spento) int lastStatoLED2 = 0; // ultimo stato del LED2 (per ora spento) // Avvio dell'applicazione void setup() { pinMode(LED1, OUTPUT); // imposta il pin digitale come output pinMode(LED2, OUTPUT); // imposta il pin digitale come output } // Avvio del loop void loop() { // carico il tempo passato dall'avvio del programma TempoCorrente = millis(); // Verifico se devo far cambiare stato al LED1 if (TempoCorrente >= UltimoEventoLED1 + semiperiodoLED1){ if (lastStatoLED1 == 0){ digitalWrite(LED1, HIGH); // accende il LED1 lastStatoLED1 = 1; // aggiorna stato LED1 } else{ digitalWrite(LED1, LOW); // spegne il LED1 lastStatoLED1 = 0; // aggiorna stato LED1 } UltimoEventoLED1 = UltimoEventoLED1 + semiperiodoLED1; // aggiorno per il nuovo evento } // Verifico se devo far cambiare stato al LED2 if (TempoCorrente >= UltimoEventoLED2 + semiperiodoLED2){ if (lastStatoLED2 == 0){ digitalWrite(LED2, HIGH); // accende il LED2 lastStatoLED2 = 1; // aggiorna stato LED2 } else{ digitalWrite(LED2, LOW); // spegne il LED2 lastStatoLED2 = 0; // aggiorna stato LED2 } UltimoEventoLED2 = UltimoEventoLED2 + semiperiodoLED2; // aggiorno per il nuovo evento } }
Ultime modifiche: mercoledì, 10 gennaio 2024, 18:12