// Definizione dei pin
const int pedoniButtonPin = 2;
const int semaforoPedoniPin = 3;
const int semaforoVeicoliPin = 4;
// Definizione dei tempi di accensione dei semafori
const unsigned long tempoVerdePedoni = 5000; // 5 secondi
const unsigned long tempoGialloPedoni = 2000; // 2 secondi
const unsigned long tempoVerdeVeicoli = 7000; // 7 secondi
const unsigned long tempoGialloVeicoli = 2000; // 2 secondi
// Variabili di stato
bool pedoniChiamata = false;
void setup() {
// Configurazione dei pin
pinMode(pedoniButtonPin, INPUT_PULLUP);
pinMode(semaforoPedoniPin, OUTPUT);
pinMode(semaforoVeicoliPin, OUTPUT);
// Semaforo iniziale
digitalWrite(semaforoPedoniPin, LOW);
digitalWrite(semaforoVeicoliPin, HIGH);
}
void loop() {
// Controllo della chiamata dei pedoni
if (digitalRead(pedoniButtonPin) == LOW) {
pedoniChiamata = true;
}
// Ciclo del semaforo
if (!pedoniChiamata) {
// Semaforo per i veicoli
digitalWrite(semaforoPedoniPin, LOW);
digitalWrite(semaforoVeicoliPin, HIGH);
delay(tempoVerdeVeicoli);
digitalWrite(semaforoVeicoliPin, LOW);
delay(tempoGialloVeicoli);
}
else {
// Semaforo per i pedoni
digitalWrite(semaforoVeicoliPin, LOW);
digitalWrite(semaforoPedoniPin, HIGH);
delay(tempoVerdePedoni);
digitalWrite(semaforoPedoniPin, LOW);
delay(tempoGialloPedoni);
pedoniChiamata = false;
}
}
In questo esempio, utilizziamo un pulsante collegato al pin 2 per simulare la chiamata dei pedoni. Quando il pulsante viene premuto, viene impostata la variabile ‘pedoniChiamata‘ su ‘true‘, segnalando che i pedoni vogliono attraversare la strada.
Il loop principale controlla se la chiamata dei pedoni è stata attivata. Se non è stata attivata, il semaforo dei veicoli è verde mentre il semaforo dei pedoni è spento. Dopo un periodo di tempo, il semaforo dei veicoli passa a giallo per un breve periodo.
Se la chiamata dei pedoni è stata attivata, il semaforo dei veicoli viene spento e il semaforo dei pedoni diventa verde per un periodo di tempo. Successivamente, il semaforo dei pedoni passa a giallo per un breve periodo e la variabile ‘pedoniChiamata‘ viene reimpostata su ‘false‘ per consentire il ritorno al normale funzionamento del semaforo.
