// coded by Markus Scheurer, last edited 2023-11-21
// definitions for lights and button
#define car_red 10
#define car_orange 9
#define car_green 8
#define pedestrian_red 7
#define pedestrian_green 6
#define pushbutton 13
// bool status
bool condition = 0 ; // 0 = low, 1 = high; https://docs.wokwi.com/parts/wokwi-pushbutton
// definitions for lopps
#define short_loop 2000
#define long_loop 5000
// configuration for traffic lights and push button
void setup() {
// car traffic lights
pinMode(car_red, OUTPUT);
pinMode(car_orange, OUTPUT);
pinMode(car_green, OUTPUT);
// pedestrian traffic lights
pinMode(pedestrian_red, OUTPUT);
pinMode(pedestrian_green, OUTPUT);
// condition push button
pinMode(pushbutton, INPUT_PULLUP); //INPUT_PULLUP = activate electric resistance
// Turn on the traffic light in check mode
digitalWrite(car_red, HIGH);
digitalWrite(pedestrian_red, HIGH);
delay(short_loop);
digitalWrite(car_orange, HIGH);
delay(short_loop);
}
void loop() {
// initial situation
digitalWrite(car_red, LOW);
digitalWrite(car_orange, LOW);
digitalWrite(car_green, HIGH);
digitalWrite(pedestrian_green, LOW);
delay(short_loop);
condition =! digitalRead(pushbutton);
// pullup resistance activated, low = button is pushed
// do this when button is pushed
if (condition == HIGH){
delay(200);
// after 2 seconds change car traffic light from green to orange
digitalWrite(car_green, LOW);
digitalWrite(car_orange, HIGH);
delay(short_loop);
// after 2 seconds change car traffic light from orange to red
digitalWrite(car_orange, LOW);
digitalWrite(car_red, HIGH);
delay(short_loop);
// after 2 second change pedestrian traffic light from red to green, pedestrians have 5 seconds to walk
digitalWrite(pedestrian_red, LOW);
digitalWrite(pedestrian_green, HIGH);
delay(long_loop);
// after 5 seconds change car traffic light, activate orange plus red
digitalWrite(car_orange, HIGH);
delay(short_loop);
// after 2 seconds change pedestrian traffic light back to red, but wait 2 seconds to set green for cars again
digitalWrite(pedestrian_red, HIGH);
digitalWrite(pedestrian_green, LOW);
// after 2 second change car traffic light back to green
delay(short_loop);
}
}