const int Vert = 8;
const int Orange = 9;
const int Rouge = 10;
const int VertPieton = 5;
const int RougePieton = 6;
const int Buzzer = 4;
const int BoutonPieton = 2;
int etatFeu = 0;
unsigned long precedent = 0;
// Etats (0=Vert Voiture/1=Orange Voiture/2=Rouge Voiture/3=Passage Pieton)
bool demandePieton =false;
unsigned long precedentBuzzer =0;
bool etatBuzzer =false;
void afficherEtat()
{
Serial.print("Etat feu = ");
Serial.println(etatFeu);
}
void setup() {
// put your setup code here, to run once:
pinMode(Vert, OUTPUT);
pinMode(Orange, OUTPUT);
pinMode(Rouge, OUTPUT);
pinMode(VertPieton, OUTPUT);
pinMode(RougePieton, OUTPUT);
pinMode(Buzzer, OUTPUT);
pinMode(BoutonPieton, INPUT_PULLUP);
Serial.begin(9600);
afficherEtat();
}
void loop() {
// put your main code here, to run repeatedly:
//Demande pieton
if(digitalRead(BoutonPieton) == LOW)
{
demandePieton = true;
}
if(etatFeu == 0) // Etat Feu Voiture Vert
{
digitalWrite(Vert,HIGH);
digitalWrite(Orange, LOW);
digitalWrite(Rouge, LOW);
digitalWrite(VertPieton, LOW);
digitalWrite(RougePieton, HIGH);
digitalWrite(Buzzer, LOW);
if(millis()- precedent >= 10000)
{
etatFeu = 1;
precedent = millis();
afficherEtat();
}
}
else if(etatFeu == 1) // Etat Feu Voiture Orange
{
digitalWrite(Vert,LOW);
digitalWrite(Orange, HIGH);
digitalWrite(Rouge, LOW);
digitalWrite(VertPieton, LOW);
digitalWrite(RougePieton, HIGH);
digitalWrite(Buzzer, LOW);
if(millis()- precedent >= 5000)
{
etatFeu = 2;
precedent = millis();
afficherEtat();
}
}
else if(etatFeu == 2) // Etat Feu Voiture Rouge
{
digitalWrite(Vert,LOW);
digitalWrite(Orange, LOW);
digitalWrite(Rouge, HIGH);
digitalWrite(VertPieton, LOW);
digitalWrite(RougePieton, HIGH);
digitalWrite(Buzzer, LOW);
if(millis()- precedent >= 10000)
{
if(demandePieton == true)
{
etatFeu = 3;
}
else
{
etatFeu = 0;
}
//etatFeu = 0;
precedent = millis();
afficherEtat();
}
}
else if(etatFeu == 3)
{
digitalWrite(Vert,LOW);
digitalWrite(Orange, LOW);
digitalWrite(Rouge, HIGH);
digitalWrite(VertPieton, HIGH);
digitalWrite(RougePieton, LOW);
if(millis() - precedentBuzzer >=100)
{
etatBuzzer = !etatBuzzer;
precedentBuzzer = millis();
digitalWrite(Buzzer,etatBuzzer);
}
if(millis() - precedent >=5000)
{
demandePieton = false;
digitalWrite(Buzzer, LOW);
etatBuzzer = false;
etatFeu = 0;
precedent = millis();
afficherEtat();
}
}
if(digitalRead(BoutonPieton) == LOW)
{
demandePieton = true;
}
// else
// {
// demandePieton = false;
// }
}