//Traffic Light 1
int green1 = 11;
int yellow1 = 10;
int red1 = 9;
//Traffic Light 2
int green2 = 7;
int yellow2 = 6;
int red2 = 5;
//Pin Buttons
int PinButton[] = {4,8};
int buttons[] = {0,0};
int currentState = 0;
unsigned long start = 0;
unsigned long gNrDelay = 6000;
unsigned long yDelay = 3500;
void setup() {
pinMode (green1, OUTPUT);
pinMode (yellow1, OUTPUT);
pinMode (red1, OUTPUT);
pinMode (green2, OUTPUT);
pinMode (yellow2, OUTPUT);
pinMode (red2, OUTPUT);
pinMode (PinButton[0], INPUT);
pinMode (PinButton[1], INPUT);
Serial.begin(9600);
start = millis();
}
void loop() {
buttons[0] = digitalRead(PinButton[0]);
buttons[1] = digitalRead(PinButton[1]);
Traffic();
if(buttons[0]==HIGH){
currentState = 0 ;
TrafficLight();
}
else if(buttons[1]==HIGH){
currentState = 2;
TrafficLight();
}
}
void Traffic() {
unsigned long currentTime = millis();
unsigned long elapsedTime = currentTime - start;
if (currentState == 0) {
if (elapsedTime < gNrDelay) {
digitalWrite(green1, HIGH);
digitalWrite(yellow1, LOW);
digitalWrite(red1, LOW);
digitalWrite(green2, LOW);
digitalWrite(yellow2, LOW);
digitalWrite(red2, HIGH);
} else {
currentState = 1;
start = currentTime;
}
} else if (currentState == 1) {
if (elapsedTime < yDelay) {
digitalWrite(green1, LOW);
digitalWrite(yellow1, HIGH);
digitalWrite(red1, LOW);
digitalWrite(green2, LOW);
digitalWrite(yellow2, LOW);
digitalWrite(red2, HIGH);
} else {
currentState = 2;
start = currentTime;
}
} else if (currentState == 2) {
if (elapsedTime < gNrDelay) {
digitalWrite(green1, LOW);
digitalWrite(yellow1, LOW);
digitalWrite(red1, HIGH);
digitalWrite(green2, HIGH);
digitalWrite(yellow2, LOW);
digitalWrite(red2, LOW);
} else {
currentState = 3;
start = currentTime;
}
} else if (currentState == 3) {
if (elapsedTime < yDelay) {
digitalWrite(green1, LOW);
digitalWrite(yellow1, LOW);
digitalWrite(red1, HIGH);
digitalWrite(green2, LOW);
digitalWrite(yellow2, HIGH);
digitalWrite(red2, LOW);
} else {
currentState = 0;
start = currentTime;
}
}
}
void TrafficLight() {
unsigned long currentTime1 = millis();
unsigned long elapsedTime1 = currentTime1 - start;
if (currentState == 0) {
if (elapsedTime1 < gNrDelay) {
digitalWrite(green1, HIGH);
digitalWrite(yellow1, LOW);
digitalWrite(red1, LOW);
digitalWrite(green2, LOW);
digitalWrite(yellow2, HIGH);
delay(500);
digitalWrite(red2, HIGH);
} else {
currentState = 1;
start = currentTime1;
}
} else if (currentState == 1) {
if (elapsedTime1 < yDelay) {
digitalWrite(green1, LOW);
digitalWrite(yellow1, HIGH);
digitalWrite(red1, LOW);
digitalWrite(green2, LOW);
digitalWrite(yellow2, LOW);
digitalWrite(red2, HIGH);
} else {
currentState = 2;
start = currentTime1;
}
} else if (currentState == 2) {
if (elapsedTime1 < gNrDelay) {
digitalWrite(green1, LOW);
digitalWrite(yellow1, HIGH);
delay(500);
digitalWrite(red1, HIGH);
digitalWrite(yellow2, LOW);
digitalWrite(green2, HIGH);
digitalWrite(red2, LOW);
} else {
currentState = 3;
start = currentTime1;
}
} else if (currentState == 3) {
if (elapsedTime1 < yDelay) {
digitalWrite(green1, LOW);
digitalWrite(yellow1, LOW);
digitalWrite(red1, HIGH);
digitalWrite(green2, LOW);
digitalWrite(yellow2, HIGH);
digitalWrite(red2, LOW);
} else {
currentState = 0;
start = currentTime1;
}
}
}