void setup() {
for (int i = 0; i < 4; i++) pinMode(macchina2[i], OUTPUT); // dichiariamo che i pin dei led dell'array macchina2 sono OUTPUT
for (int i = 0; i < 4; i++) pinMode(macchina[i], OUTPUT); // dichiariamo che i pin dei led dell'array macchina sono OUTPUT
for (int i = 0; i < 3; i++) pinMode(pedoni[i], OUTPUT); // dichiariamo che i pin dei led dell'array pedoni sono OUTPUT
pinMode(buzzer, OUTPUT);
pinMode(pulsante, INPUT_PULLUP); // dichiariamo che il pin del pulsante e' un INPUT. PULLUP significa che il pulsante e' collegato tramite una
// resistenza ai 5V di arduini. Quindi quando non e' premuto ci restituira' valore logico 1 mentre quando premuto
// ci dara' valore logico 0
}
void loop() {
digitalWrite(pedoni[0], HIGH); // accendiamo il led presente nella posizione '0' dell'array pedoni
digitalWrite(macchina[conteggio], HIGH); // accendiamo il led presente nella posizione 'conteggio' dell'array macchina
digitalWrite(macchina2[conteggio], HIGH); // accendiamo il led presente nella posizione 'conteggio' dell'array macchina2
long tempo = 4000 + millis(); // la variabile tempo assume il valore della funzione millis() + 4000
while (tempo >= millis()) { // aspetto 4 secondi nel ciclo while
if (digitalRead(pulsante) == 0) prenotazione = 1; // se nel ciclo viene effettuata la chiamata pedonale, la variabile prenotazione varra' 1
delay(50); // ritardo di 50ms
}
digitalWrite(macchina[conteggio], LOW); // spengiamo il led presente nella posizione 'conteggio' dell'array macchina
digitalWrite(macchina2[conteggio], LOW); // spegniamo il led presente nella posizione 'conteggio' dell'array macchina2
if (conteggio > 2) { // se il conteggio e' 3 devo riazzerlarlo
conteggio = 0; // azzero il conteggio
if (prenotazione == 1) chiamataAttivata(); // solo se e' stata effettuata la chiamata pedonale, eseguo la funzione chiamataAttivata()
} else {
conteggio++; // altrimenti se il conteggio e' minore di 3, conteggio viene incrementato di 1
}
}
void chiamataAttivata() {
digitalWrite(macchina[0], HIGH); // accendo il led rosso del primo semaforo delle macchine
digitalWrite(macchina2[2], HIGH); // accendo il led rosso del secondo semaforo delle macchine
for (int i = 0; i < 3; i++) { // ciclo for nel quale viene effettuato il ciclo del semaforo dei pedoni
digitalWrite(pedoni[i], HIGH); // accendo il led nella posizione i dell'array pedoni
long tempo = millis() + 6000; // tempo vale 6000 + millis()
while (tempo >= millis()) { // per 6 secondi tengo accenso quel led
if (i == 1) { // quando e' acceso il led verde dei pedoni i = 1 quindi ci sara' il lampeggio di suono del Buzzer
digitalWrite(buzzer, HIGH); // accensione suono buzzer
delay(500); // ritardo 500ms
digitalWrite(buzzer, LOW); // spegnimento suono buzzer
delay(500); // ritardo 500ms
} else if (i == 2) { // quando e' acceso il giallo verde dei pedoni i = 2 quindi ci sara' il lampeggio di suono del Buzzer (piu' veloce)
digitalWrite(buzzer, HIGH); // accensione suono buzzer
delay(200); // ritardo 200ms
digitalWrite(buzzer, LOW); // spegnimento suono buzzer
delay(200); // ritardo 200ms
}
}
digitalWrite(pedoni[i], LOW); // spengo il led nella posizioe i dell'array pedoni
}
prenotazione = 0; // prenotazione torna a valere 0
digitalWrite(macchina2[2], LOW); // spengo il led rosso del secondo semaforo delle macchine
}