int trafficLights[] = {8, 9, 10, 11, 12, 13}; // Red, Yellow, Green for two sets
int PinButton[] = {7, 6}; // Buttons for shortening the timing
int buttons[] = {0, 0};
int currentState = 0;
unsigned long start = 0;
unsigned long greenDelay = 3000; // Normal green light duration
unsigned long yellowDelay = 1000; // Normal yellow light duration
unsigned long adjustedGreenDelay = 1500; // Shortened green light duration
bool isAdjusted = false; // Flag to track if timing is adjusted
void setup() {
for (int i = 0; i < 6; i++) {
pinMode(trafficLights[i], OUTPUT);
}
for (int i = 0; i < 2; i++) {
pinMode(PinButton[i], INPUT_PULLUP);
}
Serial.begin(9600);
start = millis();
}
void loop() {
buttons[0] = digitalRead(PinButton[0]);
buttons[1] = digitalRead(PinButton[1]);
// Check if either button is pressed to shorten delays
if ((buttons[0] == LOW || buttons[1] == LOW) && !isAdjusted) {
isAdjusted = true; // Set flag to indicate timing is adjusted
Serial.println("Button pressed: Delays shortened for current cycle.");
delay(200); // Debounce delay
}
TrafficLight();
}
void TrafficLight() {
unsigned long currentTime = millis();
unsigned long elapsedTime = currentTime - start;
unsigned long currentGreenDelay = isAdjusted ? adjustedGreenDelay : greenDelay; // Use adjusted delay if needed
switch (currentState) {
case 0: // Green for Traffic Light 1
setTrafficLight(LOW, LOW, HIGH, HIGH, LOW, LOW); // Green light for Traffic Light 1
Serial.println("State 0: Green for Traffic Light 1.");
changeState(1, elapsedTime, currentGreenDelay);
break;
case 1: // Yellow for Traffic Light 1
setTrafficLight(LOW, HIGH, LOW, HIGH, LOW, LOW); // Yellow light for Traffic Light 1
Serial.println("State 1: Yellow for Traffic Light 1.");
changeState(2, elapsedTime, yellowDelay);
break;
case 2: // Green for Traffic Light 2
setTrafficLight(HIGH, LOW, LOW, LOW, LOW, HIGH); // Green light for Traffic Light 2
Serial.println("State 2: Green for Traffic Light 2.");
changeState(3, elapsedTime, greenDelay); // Normal delay for Traffic Light 2
break;
case 3: // Yellow for Traffic Light 2
setTrafficLight(HIGH, LOW, LOW, LOW, HIGH, LOW); // Yellow light for Traffic Light 2
Serial.println("State 3: Yellow for Traffic Light 2.");
changeState(0, elapsedTime, yellowDelay); // Normal delay for Traffic Light 2
break;
}
// Reset to normal timing after a full cycle
if (currentState == 3 && elapsedTime >= yellowDelay) {
isAdjusted = false; // Reset the flag
Serial.println("Delays reset to normal.");
}
}
void setTrafficLight(int r1, int y1, int g1, int r2, int y2, int g2) {
digitalWrite(trafficLights[0], r1); // Red for Traffic Light 1
digitalWrite(trafficLights[1], y1); // Yellow for Traffic Light 1
digitalWrite(trafficLights[2], g1); // Green for Traffic Light 1
digitalWrite(trafficLights[3], r2); // Red for Traffic Light 2
digitalWrite(trafficLights[4], y2); // Yellow for Traffic Light 2
digitalWrite(trafficLights[5], g2); // Green for Traffic Light 2
}
void changeState(int nextState, unsigned long elapsedTime, unsigned long delayTime) {
if (elapsedTime >= delayTime) {
currentState = nextState;
start = millis();
}
}