const int RED_TRAFFIC_LIGHT_PIN = 13;
const int AMBER_TRAFFIC_LIGHT_PIN = 12;
const int GREEN_TRAFFIC_LIGHT_PIN = 11;
const int RED_PEDESTRIAN_LIGHT_PIN = 10;
const int GREEN_PEDESTRIAN_LIGHT_PIN = 9;
const int PEDESTRIAN_BUTTON_PIN = 2;
const int MULTIPLE_BUTTON_PRESS_DELAY_mS = 15;
const int DELAY_BEFORE_TRAFFIC_CAN_BE_STOPPED_AGAIN_mS = 60000;
const int DELAY_FOR_TRAFFIC_TO_STOP_mS = 3000;
const int DELAY_FOR_PEDESTRIANS_TO_CROSS_mS = 10000;
const int DELAY_FOR_PEDESTRIANS_TO_COMPLETE_CROSSING_mS = 5000;
const int SWITCH_PIN = 2;
const int SW_INT = digitalPinToInterrupt(SWITCH_PIN);
void setup() {
pinMode(RED_TRAFFIC_LIGHT_PIN,OUTPUT);
pinMode(AMBER_TRAFFIC_LIGHT_PIN,OUTPUT);
pinMode(GREEN_TRAFFIC_LIGHT_PIN,OUTPUT);
pinMode(RED_PEDESTRIAN_LIGHT_PIN,OUTPUT);
pinMode(GREEN_PEDESTRIAN_LIGHT_PIN,OUTPUT);
pinMode(PEDESTRIAN_BUTTON_PIN, INPUT);
digitalWrite(GREEN_TRAFFIC_LIGHT_PIN, HIGH);
digitalWrite(RED_PEDESTRIAN_LIGHT_PIN, HIGH);
}
void loop() {
if(digitalRead(PEDESTRIAN_BUTTON_PIN) == HIGH) {
delay(15);
if(digitalRead(PEDESTRIAN_BUTTON_PIN) == HIGH) {
changeLights();
DelayForPedestriansToCross();
for (int i=0; i<5; i++) BlinkingLights();
LightsCycleBackToGreen ();
delay(60000);
}
}
}
void changeLights() {
digitalWrite(GREEN_TRAFFIC_LIGHT_PIN, LOW);
digitalWrite(AMBER_TRAFFIC_LIGHT_PIN, HIGH);
delay(3000);
}
void DelayForPedestriansToCross() {
digitalWrite(AMBER_TRAFFIC_LIGHT_PIN, LOW);
digitalWrite(RED_TRAFFIC_LIGHT_PIN, HIGH);
digitalWrite(RED_PEDESTRIAN_LIGHT_PIN, LOW);
digitalWrite(GREEN_PEDESTRIAN_LIGHT_PIN, HIGH);
delay(10000);
}
void BlinkingLights () {
digitalWrite(RED_TRAFFIC_LIGHT_PIN, LOW);
digitalWrite(AMBER_TRAFFIC_LIGHT_PIN, HIGH);
digitalWrite(GREEN_PEDESTRIAN_LIGHT_PIN, HIGH);
delay(500);
digitalWrite(RED_TRAFFIC_LIGHT_PIN, LOW);
digitalWrite(AMBER_TRAFFIC_LIGHT_PIN, LOW);
digitalWrite(GREEN_PEDESTRIAN_LIGHT_PIN, LOW);
delay(500);
digitalWrite(RED_TRAFFIC_LIGHT_PIN, LOW);
digitalWrite(AMBER_TRAFFIC_LIGHT_PIN, HIGH);
digitalWrite(GREEN_PEDESTRIAN_LIGHT_PIN, HIGH);
}
void LightsCycleBackToGreen () {
digitalWrite(AMBER_TRAFFIC_LIGHT_PIN, LOW);
digitalWrite(RED_TRAFFIC_LIGHT_PIN, LOW);
digitalWrite(GREEN_TRAFFIC_LIGHT_PIN, HIGH);
digitalWrite(RED_PEDESTRIAN_LIGHT_PIN, HIGH);
digitalWrite(GREEN_PEDESTRIAN_LIGHT_PIN, LOW);
}