/* semaforo a doppio standard
italiano se pin 5 = LOW
tedesco se pin 5 = HIGH
data: 23/01/2024
Autore: D.L.
Classe: 2 ELE A
*/
// linee di pilotaggio dei led
const int pinR1 = 13;
const int pinG1 = 12;
const int pinV1 = 11;
const int pinR2 = 10;
const int pinG2 = 9;
const int pinV2 = 8;
// ingresso selettore modalità
const int pinmodo = 5;
void setup() {
// impostazione uscite digitali
pinMode(pinR1, OUTPUT);
pinMode(pinG1, OUTPUT);
pinMode(pinV1, OUTPUT);
pinMode(pinR2, OUTPUT);
pinMode(pinG2, OUTPUT);
pinMode(pinV2, OUTPUT);
// impostazione del selettore (input digitale)
pinMode(pinmodo, INPUT);
// attivo la comunicazione seriale
Serial.begin(9600);
}
void loop() {
bool modo;
// leggo il valore del pin di selezione (pin 5)
modo = digitalRead(pinmodo);
// eseguo l'if-else
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 è falso
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(pinR1, HIGH);
digitalWrite(pinR2, HIGH);
digitalWrite(pinG1, LOW);
digitalWrite(pinG2, LOW);
digitalWrite(pinV1, LOW);
digitalWrite(pinV2, LOW);
delay(2000);
// fase 2: V1 e R2 accesi per 10 secondi
digitalWrite(pinR1, LOW);
digitalWrite(pinR2, HIGH);
digitalWrite(pinG1, LOW);
digitalWrite(pinG2, LOW);
digitalWrite(pinV1, HIGH);
digitalWrite(pinV2, LOW);
delay(10000);
// fase 3: G1 e R2 accesi per 3 secondi
digitalWrite(pinR1, LOW);
digitalWrite(pinR2, HIGH);
digitalWrite(pinG1, HIGH);
digitalWrite(pinG2, LOW);
digitalWrite(pinV1, LOW);
digitalWrite(pinV2, LOW);
delay(3000);
// fase 4: R1 e R2 accesi per 2 secondi
digitalWrite(pinR1, HIGH);
digitalWrite(pinR2, HIGH);
digitalWrite(pinG1, LOW);
digitalWrite(pinG2, LOW);
digitalWrite(pinV1, LOW);
digitalWrite(pinV2, LOW);
delay(2000);
// fase 5: R1 e V2 accesi per 10 secondi
digitalWrite(pinR1, HIGH);
digitalWrite(pinR2, LOW);
digitalWrite(pinG1, LOW);
digitalWrite(pinG2, LOW);
digitalWrite(pinV1, LOW);
digitalWrite(pinV2, HIGH);
delay(10000);
// fase 6: R1 e G2 accesi per 3 secondi
digitalWrite(pinR1, HIGH);
digitalWrite(pinR2, LOW);
digitalWrite(pinG1, LOW);
digitalWrite(pinG2, HIGH);
digitalWrite(pinV1, LOW);
digitalWrite(pinV2, LOW);
delay(3000);
}
// function del semaforo tedesco
void SemaforoTedesco() {
// fase 1: R1 e R2 accesi per 2 secondi
digitalWrite(pinR1, HIGH);
digitalWrite(pinR2, HIGH);
digitalWrite(pinG1, LOW);
digitalWrite(pinG2, LOW);
digitalWrite(pinV1, LOW);
digitalWrite(pinV2, LOW);
delay(2000);
// fase 2: G1 e R2 accesi per 2 secondi
digitalWrite(pinR1, LOW);
digitalWrite(pinR2, HIGH);
digitalWrite(pinG1, HIGH);
digitalWrite(pinG2, LOW);
digitalWrite(pinV1, LOW);
digitalWrite(pinV2, LOW);
delay(2000);
// fase 3: V1 e R2 accesi per 10 secondi
digitalWrite(pinR1, LOW);
digitalWrite(pinR2, HIGH);
digitalWrite(pinG1, LOW);
digitalWrite(pinG2, LOW);
digitalWrite(pinV1, HIGH);
digitalWrite(pinV2, LOW);
delay(10000);
// fase 4: V1, G1 e R2 accesi per 3 secondi
digitalWrite(pinR1, LOW);
digitalWrite(pinR2, HIGH);
digitalWrite(pinG1, HIGH);
digitalWrite(pinG2, LOW);
digitalWrite(pinV1, HIGH);
digitalWrite(pinV2, LOW);
delay(3000);
// fase 51: R1 e R2 accesi per 2 secondi
digitalWrite(pinR1, HIGH);
digitalWrite(pinR2, HIGH);
digitalWrite(pinG1, LOW);
digitalWrite(pinG2, LOW);
digitalWrite(pinV1, LOW);
digitalWrite(pinV2, LOW);
delay(2000);
// fase 6: R1 e GR2 accesi per 2 secondi
digitalWrite(pinR1, HIGH);
digitalWrite(pinR2, LOW);
digitalWrite(pinG1, LOW);
digitalWrite(pinG2, HIGH);
digitalWrite(pinV1, LOW);
digitalWrite(pinV2, LOW);
delay(2000);
// fase 7: R1 e V2 accesi per 10 secondi
digitalWrite(pinR1, HIGH);
digitalWrite(pinR2, LOW);
digitalWrite(pinG1, LOW);
digitalWrite(pinG2, LOW);
digitalWrite(pinV1, LOW);
digitalWrite(pinV2, HIGH);
delay(10000);
// fase 8: R1 e G2,V2 accesi per 3 secondi
digitalWrite(pinR1, HIGH);
digitalWrite(pinR2, LOW);
digitalWrite(pinG1, LOW);
digitalWrite(pinG2, HIGH);
digitalWrite(pinV1, LOW);
digitalWrite(pinV2, HIGH);
delay(3000);
}