#define CAR_RED_LED 26
#define CAR_YELLOW_LED 25
#define CAR_GREEN_LED 33
#define GREEN_TO_YELLOW_TIMEOUT 6000
#define YELLOW_TO_RED_TIMEOUT 2000
#define RED_TO_GREEN_TIMEOUT 6000
#define PERSON_RED_LED 12
#define PERSON_GREEN_LED 13
#define PERSON_BUTTON 14
bool isPersonButtonPressed = false;
void delayToSeePressedButton(int timeoutOnMillis) {
for (uint8_t i = 0; i < 10; i++) {
delay(timeoutOnMillis / 10);
if (digitalRead(PERSON_BUTTON) == HIGH) {
isPersonButtonPressed = true;
}
}
}
void setup() {
pinMode(CAR_RED_LED, OUTPUT);
pinMode(CAR_YELLOW_LED, OUTPUT);
pinMode(CAR_GREEN_LED, OUTPUT);
pinMode(PERSON_RED_LED, OUTPUT);
pinMode(PERSON_GREEN_LED, OUTPUT);
pinMode(PERSON_BUTTON, INPUT);
}
void loop() {
digitalWrite(PERSON_RED_LED, HIGH);
digitalWrite(PERSON_GREEN_LED, LOW);
digitalWrite(CAR_GREEN_LED, HIGH);
digitalWrite(CAR_RED_LED, LOW);
delayToSeePressedButton(GREEN_TO_YELLOW_TIMEOUT);
digitalWrite(CAR_YELLOW_LED, HIGH);
digitalWrite(CAR_GREEN_LED, LOW);
delayToSeePressedButton(YELLOW_TO_RED_TIMEOUT);
if (isPersonButtonPressed) {
digitalWrite(PERSON_GREEN_LED, HIGH);
digitalWrite(PERSON_RED_LED, LOW);
digitalWrite(CAR_RED_LED, HIGH);
digitalWrite(CAR_YELLOW_LED, LOW);
delayToSeePressedButton(RED_TO_GREEN_TIMEOUT);
isPersonButtonPressed = false;
} else {
digitalWrite(CAR_RED_LED, HIGH);
digitalWrite(CAR_YELLOW_LED, LOW);
delayToSeePressedButton(RED_TO_GREEN_TIMEOUT);
}
}