#define LEDPIN_RED 23
#define LEDPIN_GREEN 2
#define LEDPIN_YELLOW 18
#define BUTTON_PIN 33
int currentState = 0; // 0: Green, 1: Yellow, 2: Red
unsigned long greenStartTime = 0;
unsigned long greenDuration = 3000;
void setup()
{
pinMode(LEDPIN_RED, OUTPUT);
pinMode(LEDPIN_GREEN, OUTPUT);
pinMode(LEDPIN_YELLOW, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop()
{
// Green state
if (currentState == 0){
greenStartTime = millis(); // time when Green started
// run green for 3000 OR until button gets pressed
digitalWrite(LEDPIN_GREEN, HIGH);
while (millis() - greenStartTime < greenDuration && digitalRead(BUTTON_PIN) == HIGH){
delay(50);
}
digitalWrite(LEDPIN_GREEN, LOW);
currentState = 1;// change state to Yellow
}
// Yellow state
else if (currentState == 1){
digitalWrite(LEDPIN_YELLOW, HIGH);
delay(500);
digitalWrite(LEDPIN_YELLOW, LOW);
currentState = 2; // Change state to Red
}
// Red state
else{
digitalWrite(LEDPIN_RED, HIGH);
delay(1500); // Red time duration
digitalWrite(LEDPIN_RED, LOW);
currentState = 0; // Change state to Green
}
}