//Progetto Semaforo 3 - Con Conteggio Durata Rosso
//Display a 7 segmenti TM1647
#include <TM1637.h>
// Definisci i pin utilizzati
const int CLK1 = 2;
const int DIO1 = 3;
const int CLK2 = 10;
const int DIO2 = 11;
// Crea i Diplay TM1637
TM1637 TMDisplay1(CLK1, DIO1);
TM1637 TMDisplay2(CLK2, DIO2);
const int Interruttore = 4; // Ingresso Interruttore ON / OFF
const int Rosso1 = 13; // Semaforo 1 Rosso
const int Giallo1 = 12; // Semaforo 1 Giallo
const int Verde1 = 9; // Semaforo 1 Verde
const int Rosso2 = 6; // Semaforo 2 Rosso
const int Giallo2 = 7; // Semaforo 2 Giallo
const int Verde2 = 8; // Semaforo 2 Verde
void setup() {
TMDisplay1.init(); // Inizializza il display 1
TMDisplay1.set(BRIGHT_TYPICAL); // Imposta la luminosità Standard display 1
TMDisplay2.init(); // Inizializza il display 1
TMDisplay2.set(BRIGHT_TYPICAL); // Imposta la luminosità Standard display 2
pinMode(Interruttore, INPUT); // Interruttore come Ingresso
pinMode(Rosso1, OUTPUT); // Semaforo 1 Rosso come Uscita
pinMode(Giallo1, OUTPUT); // Semaforo 1 Giallo come Uscita
pinMode(Verde1, OUTPUT); // Semaforo 1 Verde come Uscita
pinMode(Rosso2, OUTPUT); // Semaforo 2 Rosso come Uscita
pinMode(Giallo2, OUTPUT); // Semaforo 2 Giallo come Uscita
pinMode(Verde2, OUTPUT); // Semaforo 2 Verde come Uscita
}
unsigned int counter = 0;
void loop() {
// Se l'interruttore è LOW mettere i Semafori in Giallo Lampeggiante
// Altrimenti Accendi i Semafori
if (digitalRead(Interruttore) == LOW) {
SemaforiSpenti();
} else {
SemaforiAccesi();
}
}
// Gialli Lampeggianti Semafori Spenti
void SemaforiSpenti () {
digitalWrite(Rosso1, LOW); // Spegni Rosso su Semaforo 1
digitalWrite(Rosso2, LOW); // Spegni Rosso su Semaforo 2
digitalWrite(Verde1, LOW); // Spegni Verde su Semaforo 1
digitalWrite(Verde2, LOW); // Spegni Verde su Semaforo 2
TMDisplay1.clearDisplay(); // Spegni il Display 1
TMDisplay2.clearDisplay(); // Spegni il Display 2
digitalWrite(Giallo1, HIGH); // Accendi Giallo su Semaforo 1
digitalWrite(Giallo2, HIGH); // Accendi Giallo su Semaforo 2
delay(1000); // Tempo Lampeggio Accesso
digitalWrite(Giallo1, LOW); // Spegni Giallo su Semaforo 1
digitalWrite(Giallo2, LOW); // Spegni Giallo su Semaforo 2
delay(1000); // Tempo Lampeggio Spento
}
// Sequenza Semafori
void SemaforiAccesi() {
digitalWrite(Rosso2, HIGH); // Accendi il Rosso su Semaforo 2
digitalWrite(Rosso1, HIGH); // Accendi il Rosso su Semaforo 1
// Inserisci 1 sec. su Display 1
TMDisplay1.display(2,0); // Inserisci 0 come decimale su display 1
TMDisplay1.display(3,1); // Inserisci 1 come unità su display 1 (1 sec.)
// Inserisci 11 sec. su Display 2
TMDisplay2.display(2,1); // Inserisci 1 come decimale su display 2
TMDisplay2.display(3,1); // Inserisci 1 come unità su display 2 (11 sec.)
delay(1000); // Attesa Verde sul Semaforo 1
digitalWrite(Rosso1, LOW); // Spegni il Rosso su Semaforo 1
digitalWrite(Verde1, HIGH); // Accendi il Verde su Semaforo 1
TMDisplay1.clearDisplay(); // Spegni il Display 1
// Inserisci 10 sec. su Display 2
TMDisplay2.display(2,1); // Inserisci 1 come decimale su display 2
TMDisplay2.display(3,0); // Inserisci 0 come unità su display 2 (10 sec.)
delay(1000);
// Inserisci 9 sec. su Display 2
TMDisplay2.display(2,0); // Inserisci 0 come decimale su display 2
TMDisplay2.display(3,9); // Inserisci 9 come unità su display 2 (9 sec.)
delay(1000);
// Inserisci 8 sec. su Display 2
TMDisplay2.display(3,8); // Inserisci 8 come unità su display 2 (8 sec.)
delay(500);
// Inserisci 7 sec. su Display 2
TMDisplay2.display(3,7); // Inserisci 7 come unità su display 2 (7 sec.)
delay(1000);
// Inserisci 6 sec. su Display 2
TMDisplay2.display(3,6); // Inserisci 6 come unità su display 2 (6 sec.)
delay(1000);
// Inserisci 5 sec. su Display 2
TMDisplay2.display(3,5); // Inserisci 5 come unità su display 2 (5 sec.)
delay(1000);
// Inserisci 4 sec. su Display 2
TMDisplay2.display(3,4); // Inserisci 4 come unità su display 2 (4 sec.)
delay(1000);
// Inserisci 3 sec. su Display 2
TMDisplay2.display(3,3); // Inserisci 1 come unità su display 2 (3 sec.)
delay(1000);
// Inserisci 2 sec. su Display 2
TMDisplay2.display(3,2); // Inserisci 2 come unità su display 2 (2 sec.)
digitalWrite(Verde1, LOW); // Spegni il Verde su Semaforo 1
digitalWrite(Giallo1, HIGH); // Accendi il Giallo su Semaforo 1
delay(1000); // Attesa Cambio Colore
// Inserisci 1 sec. su Display 2
TMDisplay2.display(3,1); // Inserisci 1 come unità su display 2 (1 sec.)
digitalWrite(Giallo1, LOW); // Spegni il Giallo su Semaforo 1
digitalWrite(Rosso1, HIGH); // Accendi il Rosso su Semaforo 1
// Inserisci 11 sec. su Display 1
TMDisplay1.display(2,1); // Inserisci 1 come decimale su display 1
TMDisplay1.display(3,1); // Inserisci 1 come unità su display 1 (11 sec.)
delay(1000);
// Inserisci 10 sec. su Display 2
TMDisplay1.display(3,0); // Inserisci 0 come unità su display 1 (10 sec.)
digitalWrite(Rosso2, LOW); // Spegni il Rosso su Semaforo 2
TMDisplay2.clearDisplay(); // Spegni il Display 2
digitalWrite(Verde2, HIGH); //Accendi il Verde su Semaforo 2
TMDisplay1.display(2,0); // Inserisci 0 come decimale su display 1
TMDisplay1.display(3,9); // Inserisci 9 come unità su display 1 (9 sec.)
delay(1000);
TMDisplay1.display(3,8); // Inserisci 8 come unità su display 1 (8 sec.)
delay(1000);
TMDisplay1.display(3,7); // Inserisci 7 come unità su display 1 (7 sec.)
delay(1000);
TMDisplay1.display(3,6); // Inserisci 6 come unità su display 1 (6 sec.)
delay(1000);
TMDisplay1.display(3,5); // Inserisci 5 come unità su display 1 (5 sec.)
delay(1000);
TMDisplay1.display(3,4); // Inserisci 4 come unità su display 1 (4 sec.)
delay(1000);
TMDisplay1.display(3,3); // Inserisci 3 come unità su display 1 (3 sec.)
delay(1000);
TMDisplay1.display(3,2); // Inserisci 2 come unità su display 1 (2 sec.)
digitalWrite(Verde2, LOW); // Spegni il Verde su Semaforo 1
digitalWrite(Giallo2, HIGH); // Accendi il Giallo su Semaforo 1
delay(1000);
digitalWrite(Giallo2, LOW); // Spegni il Giallo su Semaforo 1
TMDisplay1.display(3,1);
}