// 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 pushbutton 13
#define pedestrian_red 7
#define pedestrian_green 6
// bool status
bool condition1 = 1 ; // 0 = low / false, 1 = high / true; https://docs.wokwi.com/parts/wokwi-pushbutton/#:~:text=The%20digital%20pin%20will%20read
bool condition2 = 1 ;
bool condition3 = 1 ;
bool condition4 = 1 ;
bool condition5 = 1 ;
// definitions for lopps
#define extra_short_loop 1000
#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
// hier lag der Fehler, da zuerst pinMode(condition1, INPUT_PULLUP) stand und damit der Button nicht angesprochen wurde
// 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);
// initial situation
digitalWrite(car_green, HIGH);
digitalWrite(car_red, LOW);
digitalWrite(car_orange, LOW);
digitalWrite(pedestrian_red, HIGH);
digitalWrite(pedestrian_green, LOW);
condition1 = digitalRead(pushbutton);
delay(short_loop);
}
void loop() {
// regular traffic switch car_green -> car_orange -> car_red -> car_orange + car_red -> back to car_green
digitalWrite(car_green, LOW);
digitalWrite(car_orange, HIGH);
condition2 = digitalRead(pushbutton);
delay(short_loop);
digitalWrite(car_orange, LOW);
digitalWrite(car_red, HIGH);
condition3 = digitalRead(pushbutton);
delay(long_loop);
digitalWrite(car_orange, HIGH);
condition4 = digitalRead(pushbutton);
delay(extra_short_loop);
digitalWrite(car_red, LOW);
digitalWrite(car_orange, LOW);
digitalWrite(car_green, HIGH);
condition5 = digitalRead(pushbutton);
delay(long_loop);
// pullup resistance activated, low = button is pushed
// do this when button is pushed
if (condition1 == LOW||condition2 == LOW||condition3 == LOW||condition4 == LOW||condition5 == LOW){
// 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(extra_short_loop);
// after 1 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 second change pedestrian traffic light back to red
digitalWrite(pedestrian_red, HIGH);
digitalWrite(pedestrian_green, LOW);
delay(extra_short_loop);
// after 1 second change car traffic light, activate orange plus red
digitalWrite(car_orange, HIGH);
delay(short_loop);
// after 2 second change car traffic light back to green
digitalWrite(car_red, LOW);
digitalWrite(car_orange, LOW);
digitalWrite(car_green, HIGH);
delay(long_loop);
}
else {
// turn off pedestrian green light
digitalWrite(pedestrian_green, LOW);
}
}