#define RED 2
#define YELLOW 3
#define GREEN 4
#define EMERGENCY_BIN 7
enum TrafficState{
NORMAL_TRAFFIC, EMERGENCY_OVERRIDE
};
TrafficState currentState = NORMAL_TRAFFIC;
void setup() {
pinMode(RED,OUTPUT);
pinMode(YELLOW,OUTPUT);
pinMode(GREEN,OUTPUT);
pinMode(EMERGENCY_BIN,INPUT_PULLUP);
}
void normalTraffic(){
digitalWrite(GREEN,HIGH);
delay(4000);
digitalWrite(GREEN,LOW);
digitalWrite(YELLOW,HIGH);
delay(2000);
digitalWrite(YELLOW,LOW);
digitalWrite(RED,HIGH);
delay(4000);
digitalWrite(RED,LOW);
}
void emergencyMode(){
digitalWrite(GREEN,HIGH);
digitalWrite(YELLOW,LOW);
digitalWrite(RED,LOW);
}
void loop() {
if(digitalRead(EMERGENCY_BIN)==LOW){
currentState=EMERGENCY_OVERRIDE;
}
switch (currentState){
case NORMAL_TRAFFIC:
normalTraffic();
break;
case EMERGENCY_OVERRIDE:
emergencyMode();
break;
}
}