// Traffic Light 1 LEDs
int tl1Red = 3;
int tl1Yellow = 4;
int tl1Green = 5;
// Traffic Light 2 LEDs
int tl2Red = 6;
int tl2Yellow = 7;
int tl2Green = 8;
//Pin Buttons
int pushButton[] = {2,9};
int buttons[] = {0,0};
// Current State
int currentState = 0;
// Delays
unsigned long start = 0;
unsigned long greenDel = 3000;
unsigned long yellowDel = 1000;
unsigned long greenDelPre = greenDel / 2;
unsigned long yellowDelPre = yellowDel / 1;
void setup() {
// Traffic Lights 1
pinMode(tl1Red, OUTPUT);
pinMode(tl1Yellow, OUTPUT);
pinMode(tl1Green, OUTPUT);
// Traffic Lights 2
pinMode(tl2Red, OUTPUT);
pinMode(tl2Yellow, OUTPUT);
pinMode(tl2Green, OUTPUT);
// PushButtons
pinMode (pushButton[0], INPUT);
pinMode (pushButton[1], INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
buttons[0] = digitalRead(pushButton[0]);
buttons[1] = digitalRead(pushButton[1]);
natSequence();
bpSequence();
if (buttons[0] == HIGH) {
if (digitalRead(tl1Green) == HIGH) {
currentState = 4;
} else if (digitalRead(tl1Yellow) == HIGH) {
currentState = 5;
}
natSequence();
} else if (buttons[1] == HIGH) {
if (digitalRead(tl2Green) == HIGH) {
currentState = 8;
} else if (digitalRead(tl2Yellow) == HIGH) {
currentState = 9;
}
natSequence();
} else {
natSequence();
}
}
void bpSequence() {
unsigned long currentTime = millis();
unsigned long elapsedTime = currentTime - start;
// Button 1 Pressed
if (currentState == 4) {
if (elapsedTime < greenDelPre) {
// Traffic Lights 1
digitalWrite(tl1Red, LOW);
digitalWrite(tl1Yellow, LOW);
digitalWrite(tl1Green, HIGH);
// Traffic Lights 2
digitalWrite(tl2Red, HIGH);
digitalWrite(tl2Yellow, LOW);
digitalWrite(tl2Green, LOW);
}
else {
currentState = 5;
start = currentTime;
}
} else if (currentState == 5) {
if (elapsedTime < yellowDelPre) {
// Traffic Lights 1
digitalWrite(tl1Green, LOW);
digitalWrite(tl1Red, LOW);
digitalWrite(tl1Yellow, HIGH);
}
else {
currentState = 6;
start = currentTime;
}
} else if (currentState == 6) {
if (elapsedTime < greenDel) {
// Traffic Lights 1
digitalWrite(tl1Green, LOW);
digitalWrite(tl1Yellow, LOW);
digitalWrite(tl1Red, HIGH);
// Traffic Lights 2
digitalWrite(tl2Green, HIGH);
digitalWrite(tl2Yellow, LOW);
digitalWrite(tl2Red, LOW);
} else {
currentState = 7;
start = currentTime;
}
} else if (currentState == 7) {
if (elapsedTime < yellowDel) {
digitalWrite(tl2Green, LOW);
digitalWrite(tl2Red, LOW);
digitalWrite(tl2Yellow, HIGH);
} else {
currentState = 0;
start = currentTime;
}
}
// Button 2 Pressed
if (currentState == 8) {
if (elapsedTime < greenDelPre) {
// Traffic Lights 1
digitalWrite(tl2Red, LOW);
digitalWrite(tl2Yellow, LOW);
digitalWrite(tl2Green, HIGH);
// Traffic Lights 2
digitalWrite(tl1Red, HIGH);
digitalWrite(tl1Yellow, LOW);
digitalWrite(tl1Green, LOW);
}
else {
currentState = 9;
start = currentTime;
}
} else if (currentState == 9) {
if (elapsedTime < yellowDelPre) {
// Traffic Lights 1
digitalWrite(tl2Green, LOW);
digitalWrite(tl2Red, LOW);
digitalWrite(tl2Yellow, HIGH);
}
else {
currentState = 10;
start = currentTime;
}
} else if (currentState == 10) {
if (elapsedTime < greenDel) {
// Traffic Lights 1
digitalWrite(tl2Green, LOW);
digitalWrite(tl2Yellow, LOW);
digitalWrite(tl2Red, HIGH);
// Traffic Lights 2
digitalWrite(tl1Green, HIGH);
digitalWrite(tl1Yellow, LOW);
digitalWrite(tl1Red, LOW);
} else {
currentState = 11;
start = currentTime;
}
} else if (currentState == 11) {
if (elapsedTime < yellowDel) {
// Traffic Lights 1
digitalWrite(tl1Green, LOW);
digitalWrite(tl1Red, LOW);
digitalWrite(tl1Yellow, HIGH);
} else {
currentState = 12;
start = currentTime;
}
} else if (currentState == 12) {
if (elapsedTime < greenDel) {
// Traffic Lights 1
digitalWrite(tl1Green, LOW);
digitalWrite(tl1Yellow, LOW);
digitalWrite(tl1Red, HIGH);
// Traffic Lights 2
digitalWrite(tl2Green, HIGH);
digitalWrite(tl2Yellow, LOW);
digitalWrite(tl2Red, LOW);
} else {
currentState = 13;
start = currentTime;
}
} else if (currentState == 13) {
if (elapsedTime < yellowDel) {
// Traffic Lights 1
digitalWrite(tl1Green, LOW);
digitalWrite(tl1Red, HIGH);
digitalWrite(tl1Yellow, LOW);
} else {
currentState = 0;
start = currentTime;
}
}
}
void natSequence() {
unsigned long currentTime = millis();
unsigned long elapsedTime = currentTime - start;
if (currentState == 0) {
if (elapsedTime < greenDel) {
// Traffic Lights 1
digitalWrite(tl1Red, LOW);
digitalWrite(tl1Yellow, LOW);
digitalWrite(tl1Green, HIGH);
// Traffic Lights 2
digitalWrite(tl2Red, HIGH);
digitalWrite(tl2Yellow, LOW);
digitalWrite(tl2Green, LOW);
}
else {
currentState = 1;
start = currentTime;
}
} else if (currentState == 1) {
if (elapsedTime < yellowDel) {
// Traffic Lights 1
digitalWrite(tl1Green, LOW);
digitalWrite(tl1Red, LOW);
digitalWrite(tl1Yellow, HIGH);
}
else {
currentState = 2;
start = currentTime;
}
} else if (currentState == 2) {
if (elapsedTime < greenDel) {
// Traffic Lights 1
digitalWrite(tl1Green, LOW);
digitalWrite(tl1Yellow, LOW);
digitalWrite(tl1Red, HIGH);
// Traffic Lights 2
digitalWrite(tl2Green, HIGH);
digitalWrite(tl2Yellow, LOW);
digitalWrite(tl2Red, LOW);
} else {
currentState = 3;
start = currentTime;
}
} else if (currentState == 3) {
if (elapsedTime < yellowDel) {
digitalWrite(tl2Green, LOW);
digitalWrite(tl2Red, LOW);
digitalWrite(tl2Yellow, HIGH);
} else {
currentState = 0;
start = currentTime;
}
}
}