int ledGREEN1 = 1;
int ledYELLOW1 = 2;
int ledRED1 = 3;
int ledGREEN2 = 4;
int ledYELLOW2 = 5;
int ledRED2 = 6;
int btnPin1 = 8;
int btnPin2 = 9;
int currentState = 0;
unsigned long startTime = 0;
void setup() {
pinMode(ledGREEN1, OUTPUT);
pinMode(ledYELLOW1, OUTPUT);
pinMode(ledRED1, OUTPUT);
pinMode(ledGREEN2, OUTPUT);
pinMode(ledYELLOW2, OUTPUT);
pinMode(ledRED2, OUTPUT);
pinMode(btnPin1, INPUT);
pinMode(btnPin2, INPUT);
startTime = millis();
}
void loop() {
int buttonState1 = digitalRead(btnPin1);
int buttonState2 = digitalRead(btnPin2);
unsigned long currentTime = millis();
unsigned long elapsedTime = currentTime - startTime;
if (buttonState1 == HIGH && digitalRead(ledGREEN1) == HIGH) {
if (currentState != 4) {
currentState = 4;
startTime = currentTime;
}
}
else if (buttonState1 == HIGH) {
currentState = 2;
startTime = currentTime;
}
if (buttonState2 == HIGH && digitalRead(ledGREEN2) == HIGH) {
if (currentState != 5) {
currentState = 5;
startTime = currentTime;
}
}
else if (buttonState2 == HIGH) {
currentState = 0;
startTime = currentTime;
}
trafficLightsSequence();
}
void trafficLightsSequence(){
unsigned long currentTime = millis();
unsigned long elapsedTime = currentTime - startTime;
switch (currentState) {
case 0:
if (elapsedTime <= 5000) {
digitalWrite(ledGREEN1, HIGH);
digitalWrite(ledYELLOW1, LOW);
digitalWrite(ledRED1, LOW);
digitalWrite(ledGREEN2, LOW);
digitalWrite(ledYELLOW2, LOW);
digitalWrite(ledRED2, HIGH);
}
else {
currentState = 1;
startTime = currentTime;
}
break;
case 1:
if (elapsedTime <= 2000) {
digitalWrite(ledGREEN1, LOW);
digitalWrite(ledYELLOW1, HIGH);
digitalWrite(ledRED1, LOW);
digitalWrite(ledGREEN2, LOW);
digitalWrite(ledYELLOW2, LOW);
digitalWrite(ledRED2, HIGH);
}
else {
currentState = 2;
startTime = currentTime;
}
break;
case 2:
if (elapsedTime <= 5000) {
digitalWrite(ledGREEN1, LOW);
digitalWrite(ledYELLOW1, LOW);
digitalWrite(ledRED1, HIGH);
digitalWrite(ledGREEN2, HIGH);
digitalWrite(ledYELLOW2, LOW);
digitalWrite(ledRED2, LOW);
}
else {
currentState = 3;
startTime = currentTime;
}
break;
case 3:
if (elapsedTime <= 2000) {
digitalWrite(ledGREEN1, LOW);
digitalWrite(ledYELLOW1, LOW);
digitalWrite(ledRED1, HIGH);
digitalWrite(ledGREEN2, LOW);
digitalWrite(ledYELLOW2, HIGH);
digitalWrite(ledRED2, LOW);
}
else {
currentState = 0;
startTime = currentTime;
}
break;
case 4:
if (elapsedTime <= 500) {
digitalWrite(ledGREEN1, LOW);
delay(100);
digitalWrite(ledYELLOW1, HIGH);
digitalWrite(ledRED1, LOW);
digitalWrite(ledGREEN2, LOW);
digitalWrite(ledYELLOW2, LOW);
digitalWrite(ledRED2, HIGH);
}
else {
currentState = 2;
startTime = currentTime;
}
break;
case 5:
if (elapsedTime <= 500) {
digitalWrite(ledGREEN1, LOW);
digitalWrite(ledYELLOW1, LOW);
digitalWrite(ledRED1, HIGH);
digitalWrite(ledGREEN2, LOW);
delay(100);
digitalWrite(ledYELLOW2, HIGH);
digitalWrite(ledRED2, LOW);
}
else {
currentState = 0;
startTime = currentTime;
}
break;
}
}