/* Titolo : Semaforo a due standard
Autore: Diego Colautti
Data : 29/01/2024
Classe: 2ELEA
Versione: 1.0
*/
//dichiaro le costanti
const int R1=13;
const int G1=12;
const int V1=11;
const int R2=10;
const int G2=9;
const int V2=8;
//ingresso selettore di modalità
const int pinmodo=5;
void setup() {
//imposto i pin come uscita digitale
pinMode(R1, OUTPUT);
pinMode(G1, OUTPUT);
pinMode(V1, OUTPUT);
pinMode(R2, OUTPUT);
pinMode(G2, OUTPUT);
pinMode(V2, OUTPUT);
//input
pinMode(pinmodo, INPUT);
//attivo la comunicazione seriale ( per stampare nel terminale )
Serial.begin(9600);
}
void loop() {
bool modo;
modo=digitalRead(pinmodo);
if( modo == LOW) {
//parte da eseguire se il test è vero
Serial.println("sequenza Italiana ");
//richiamo la funzione del semaforo italiano
SemaforoItaliano();
}
else {
//parte da eseguire se il test è falos
Serial.println("sequenza tedesca");
//richiamo la funzione del semaforo tedesco
SemaforoTedesco();
}
}
//function del semaforo italiano
void SemaforoItaliano() {
// Fase 1: R1 e R2 accesi per 2 secondi
digitalWrite(R1, HIGH);
digitalWrite(R2, HIGH);
digitalWrite(G1, LOW);
digitalWrite(G2, LOW);
digitalWrite(V1, LOW);
digitalWrite(V2, LOW);
delay(2000);
// Fase 2: R2 e V1 accesi per 10 secondi
digitalWrite(R1, LOW);
digitalWrite(R2, HIGH);
digitalWrite(G1, LOW);
digitalWrite(G2, LOW);
digitalWrite(V1, HIGH);
digitalWrite(V2, LOW);
delay(10000);
// Fase 3: R2 e G1 accesi per 3 secondi
digitalWrite(R1, LOW);
digitalWrite(R2, HIGH);
digitalWrite(G1, HIGH);
digitalWrite(G2, LOW);
digitalWrite(V1, LOW);
digitalWrite(V2, LOW);
delay(3000);
// Fase 4: R2 e R1 accesi per 2 secondi
digitalWrite(R1, HIGH);
digitalWrite(R2, HIGH);
digitalWrite(G1, LOW);
digitalWrite(G2, LOW);
digitalWrite(V1, LOW);
digitalWrite(V2, LOW);
delay(2000);
// Fase 5: R1 e V2 accesi per 10 secondi
digitalWrite(R1, HIGH);
digitalWrite(R2, LOW);
digitalWrite(G1, LOW);
digitalWrite(G2, LOW);
digitalWrite(V1, LOW);
digitalWrite(V2, HIGH);
delay(10000);
// Fase 6: R1 e G2 accesi per 3 secondi
digitalWrite(R1, HIGH);
digitalWrite(R2, LOW);
digitalWrite(G1, LOW);
digitalWrite(G2, HIGH);
digitalWrite(V1, LOW);
digitalWrite(V2, LOW);
delay(3000);
}
// function del semaforo tedesco
void SemaforoTedesco () {
// Fase 1: R1 e R2 accesi per 2 secondi
digitalWrite(R1, HIGH);
digitalWrite(R2, HIGH);
digitalWrite(G1, LOW);
digitalWrite(G2, LOW);
digitalWrite(V1, LOW);
digitalWrite(V2, LOW);
delay(2000);
// Fase 2: R2 e G1 accesi per 2 secondi
digitalWrite(R1, LOW);
digitalWrite(R2, HIGH);
digitalWrite(G1, HIGH);
digitalWrite(G2, LOW);
digitalWrite(V1, LOW);
digitalWrite(V2, LOW);
delay(2000);
// Fase 3: R2 e V1 accesi per 10 secondi
digitalWrite(R1, LOW);
digitalWrite(R2, HIGH);
digitalWrite(G1, LOW);
digitalWrite(G2, LOW);
digitalWrite(V1, HIGH);
digitalWrite(V2, LOW);
delay(10000);
// Fase 4: R2, G1 e V1 accesi per 3 secondi
digitalWrite(R1, LOW);
digitalWrite(R2, HIGH);
digitalWrite(G1, HIGH);
digitalWrite(G2, LOW);
digitalWrite(V1, HIGH);
digitalWrite(V2, LOW);
delay(3000);
// Fase 5: R1 e R2 accesi per 2 secondi
digitalWrite(R1, HIGH);
digitalWrite(R2, HIGH);
digitalWrite(G1, LOW);
digitalWrite(G2, LOW);
digitalWrite(V1, LOW);
digitalWrite(V2, LOW);
delay(2000);
// Fase 6: R1 e G2 accesi per 2 secondi
digitalWrite(R1, HIGH);
digitalWrite(R2, LOW);
digitalWrite(G1, LOW);
digitalWrite(G2, HIGH);
digitalWrite(V1, LOW);
digitalWrite(V2, LOW);
delay(2000);
// Fase 7: R1 e V2 accesi per 10 secondi
digitalWrite(R1, HIGH);
digitalWrite(R2, LOW);
digitalWrite(G1, LOW);
digitalWrite(G2, LOW);
digitalWrite(V1, LOW);
digitalWrite(V2, HIGH);
delay(10000);
// Fase 8: R1, G2 e V2 accesi per 3 secondi
digitalWrite(R1, HIGH);
digitalWrite(R2, LOW);
digitalWrite(G1, LOW);
digitalWrite(G2, HIGH);
digitalWrite(V1, LOW);
digitalWrite(V2, HIGH);
delay(3000);
}