/*AUTORE: Noah Salomone
TITOLO: Semaforo a due standard
DATA: 23/01/24
CLASSE: 2ELEA
SOFTWARE: 1.01*/
// linee di pilotaggio dei led
const int R1 = 13;
const int R2 = 10;
const int V1 = 11;
const int V2 = 8;
const int G1 = 12;
const int G2 = 9;
//ingresso selettore modalità
const int pinmodo = 5;
void setup() {
// imposto pin come uscita digitale
pinMode(R1,OUTPUT);
pinMode(R2,OUTPUT);
pinMode(V1,OUTPUT);
pinMode(V2,OUTPUT);
pinMode(G1,OUTPUT);
pinMode(G2,OUTPUT);
// imposto pin come selettore (input digitale)
pinMode(pinmodo, INPUT);
//attivo comunicazione seriale
Serial.begin(9600);
}
void loop() {
// leggo il valore del pin di selezione
bool modo;
modo=digitalRead(pinmodo);
// eseguo if else
if(modo == LOW) {
// parte da eseguire se il test è vero
Serial.println("sequenza italiana");
//richiamo funzione semaforo italiano
semaforoitaliano();
}
else{
// parte da eseguire se il test è falso
Serial.println("sequenza tedesca");
//richiamo funzione semaforo tedesco
semaforotedesco();
}
}
//function del semaforo italiano
void semaforoitaliano() {
// fase 1: accendere R1 e R2 per 2 secondi
digitalWrite(R1,HIGH);
digitalWrite(R2,HIGH);
digitalWrite(V1,LOW);
digitalWrite(V2,LOW);
digitalWrite(G1,LOW);
digitalWrite(G2,LOW);
delay(2000);
// fase 2: accndere V1 e R2 per 10 seocondi
digitalWrite(R1, LOW);
digitalWrite(R2,HIGH);
digitalWrite(V1,HIGH);
digitalWrite(V2,LOW);
digitalWrite(G1,LOW);
digitalWrite(G2,LOW);
delay(10000);
// fase 3: accendere G1 e R2 per 3 secondi e spegnere V1
digitalWrite(R1, LOW);
digitalWrite(R2,HIGH);
digitalWrite(V1,LOW);
digitalWrite(V2,LOW);
digitalWrite(G1,HIGH);
digitalWrite(G2,LOW);
delay(3000);
// fase 4: accnedere R1 e R2 per 2 secondi e spegnere G1
digitalWrite(R1, HIGH);
digitalWrite(R2,HIGH);
digitalWrite(V1,LOW);
digitalWrite(V2,LOW);
digitalWrite(G1,LOW);
digitalWrite(G2,LOW);
delay(2000);
// fase 5: accendere V2 e R1 per 10 secondi e spegnere R2
digitalWrite(R1,HIGH);
digitalWrite(R2,LOW);
digitalWrite(V1,LOW);
digitalWrite(V2,HIGH);
digitalWrite(G1,LOW);
digitalWrite(G2,LOW);
delay(10000);
// fase 6: accendere G2 e R1 per 3 secondi e spegnere V2
digitalWrite(R1,HIGH);
digitalWrite(R2,LOW);
digitalWrite(V1,LOW);
digitalWrite(V2,LOW);
digitalWrite(G1,LOW);
digitalWrite(G2,HIGH);
delay(3000);
}
//function semaforo tedesco
void semaforotedesco(){
// fase 1: accendere R1 e R2 per 2 secondi
digitalWrite(R1, HIGH);
digitalWrite(R2, HIGH);
digitalWrite(V1, LOW);
digitalWrite(V2, LOW);
digitalWrite(G1, LOW);
digitalWrite(G2, LOW);
delay(2000);
// fase 2: spegnere R1 e accendere R2 e G1 per 2 secondi
digitalWrite(R1, LOW);
digitalWrite(R2, HIGH);
digitalWrite(V1, LOW);
digitalWrite(V2, LOW);
digitalWrite(G1, HIGH);
digitalWrite(G2, LOW);
delay(2000);
// fase 3: spegnere G1 e accendere R2 e V1 per 10 secondi
digitalWrite(R1, LOW);
digitalWrite(R2, HIGH);
digitalWrite(V1, HIGH);
digitalWrite(V2, LOW);
digitalWrite(G1, LOW);
digitalWrite(G2, LOW);
delay(10000);
// fase 4: accendere R2, V1 e G1 per 3 secondi
digitalWrite(R1, LOW);
digitalWrite(R2, HIGH);
digitalWrite(V1, HIGH);
digitalWrite(V2, LOW);
digitalWrite(G1, HIGH);
digitalWrite(G2, LOW);
delay(3000);
// fase 5: spegnere G1 e V1 e accendere R1 e R2 per 2 secondi
digitalWrite(R1, HIGH);
digitalWrite(R2, HIGH);
digitalWrite(V1, LOW);
digitalWrite(V2, LOW);
digitalWrite(G1, LOW);
digitalWrite(G2, LOW);
delay(2000);
// fase 6: spegnere R2 e accendere R1 e G2 per 2 secondi
digitalWrite(R1, HIGH);
digitalWrite(R2, LOW);
digitalWrite(V1, LOW);
digitalWrite(V2, LOW);
digitalWrite(G1, LOW);
digitalWrite(G2, HIGH);
delay(2000);
//fase 7: spegnere G2 e accendere R1 e V2 per 10 secondi
digitalWrite(R1, HIGH);
digitalWrite(R2, LOW);
digitalWrite(V1, LOW);
digitalWrite(V2, HIGH);
digitalWrite(G1, LOW);
digitalWrite(G2, LOW);
delay(10000);
// fase 8: accendere R1, G2 e V2 per 3 secondi
digitalWrite(R1, HIGH);
digitalWrite(R2, LOW);
digitalWrite(V1, LOW);
digitalWrite(V2, HIGH);
digitalWrite(G1, LOW);
digitalWrite(G2, HIGH);
delay(3000);
}