Ecco un esempio di codice per Arduino per implementare due semafori temporizzati con ciclo inverso tra loro, con 2 minuti di verde, 2 minuti di rosso e un intervallo di 10 secondi di arancione tra verde e rosso.
// Definizione dei pin del semaforo 1
int redPin1 = 2;
int yellowPin1 = 3;
int greenPin1 = 4;
// Definizione dei pin del semaforo 2
int redPin2 = 5;
int yellowPin2 = 6;
int greenPin2 = 7;
void setup() {
// Impostazione dei pin come output
pinMode(redPin1, OUTPUT);
pinMode(yellowPin1, OUTPUT);
pinMode(greenPin1, OUTPUT);
pinMode(redPin2, OUTPUT);
pinMode(yellowPin2, OUTPUT);
pinMode(greenPin2, OUTPUT);
}
void loop() {
// Semaforo 1: verde
digitalWrite(greenPin1, HIGH);
digitalWrite(yellowPin1, LOW);
digitalWrite(redPin1, LOW);
// Semaforo 2: rosso
digitalWrite(greenPin2, LOW);
digitalWrite(yellowPin2, LOW);
digitalWrite(redPin2, HIGH);
// Aspetta 2 minuti
delay(120000);
// Semaforo 1: arancione
digitalWrite(greenPin1, LOW);
digitalWrite(yellowPin1, HIGH);
digitalWrite(redPin1, LOW);
// Semaforo 2: rosso
digitalWrite(greenPin2, LOW);
digitalWrite(yellowPin2, LOW);
digitalWrite(redPin2, HIGH);
// Aspetta 10 secondi
delay(10000);
// Semaforo 1: rosso
digitalWrite(greenPin1, LOW);
digitalWrite(yellowPin1, LOW);
digitalWrite(redPin1, HIGH);
// Semaforo 2: verde
digitalWrite(greenPin2, HIGH);
digitalWrite(yellowPin2, LOW);
digitalWrite(redPin2, LOW);
// Aspetta 2 minuti
delay(120000);
// Semaforo 1: rosso
digitalWrite(greenPin1, LOW);
digitalWrite(yellowPin1, LOW);
digitalWrite(redPin1, HIGH);
// Semaforo 2: arancione
digitalWrite(greenPin2, LOW);
digitalWrite(yellowPin2, HIGH);
digitalWrite(redPin2, LOW);
// Aspetta 10 secondi
delay(10000);
}
Nota che in questo esempio, il tempo di attesa viene gestito utilizzando la funzione ‘delay()
‘, che sospende l’esecuzione del codice per il numero di millisecondi specificato. Questo rende il codice facile da scrivere e leggere, ma può essere problematico se il microcontrollore deve fare altro durante l’attesa. In alternativa, si potrebbe utilizzare una tecnica di temporizzazione basata sul tempo trascorso dall’ultima volta che il semaforo è stato cambiato di stato. Ci sono anche librerie di temporizzazione disponibili per Arduino che possono semplificare questo tipo di programmazione.