const int greenLed1 = 2;
const int amberLed1 = 3;
const int redLed1 = 4;
const int pirSensor1 = 7;
const int button1 = 5; // Push button for Lane 1
const int greenLed2 = 9;
const int amberLed2 = 10;
const int redLed2 = 11;
const int pirSensor2 = 8;
const int button2 = 6; // Push button for Lane 2
const int potentiometer = A0; // Analog pin for variable resistor
const int delayRange = 20000; // 20 seconds maximum delay
void setup() {
pinMode(greenLed1, OUTPUT);
pinMode(amberLed1, OUTPUT);
pinMode(redLed1, OUTPUT);
pinMode(pirSensor1, INPUT);
pinMode(button1, INPUT_PULLUP);
pinMode(greenLed2, OUTPUT);
pinMode(amberLed2, OUTPUT);
pinMode(redLed2, OUTPUT);
pinMode(pirSensor2, INPUT);
pinMode(button2, INPUT_PULLUP);
pinMode(potentiometer, INPUT);
Serial.begin(9600);
}
void loop() {
int delayTime = map(analogRead(potentiometer), 0, 1023, 5000, delayRange);
if (digitalRead(button1) == LOW || detectMotion(pirSensor1)) {
// Lane 1 is active
debugMessage("Lane 1 active");
setLights(greenLed1, amberLed1, redLed1, delayTime);
} else if (digitalRead(button2) == LOW || detectMotion(pirSensor2)) {
// Lane 2 is active
debugMessage("Lane 2 active");
setLights(greenLed2, amberLed2, redLed2, delayTime);
}
}
void setLights(int green, int amber, int red, int delayTime) {
// Red to red/amber transition
digitalWrite(red, HIGH);
delay(10000); // Red delay set to 10 seconds
// Amber delay
digitalWrite(red, LOW); // Turn off red
digitalWrite(amber, HIGH);
delay(3000); // Amber delay set to 3 seconds
// Green delay
digitalWrite(amber, LOW); // Turn off amber
digitalWrite(green, HIGH);
delay(20000); // Green delay set to 20 seconds
while (detectMotion(pirSensor1) || detectMotion(pirSensor2) || digitalRead(button1) == LOW || digitalRead(button2) == LOW) {
// Wait for the other lane to clear or press button
debugMessage("Waiting for other lane to clear or press button ");
delay(1000);
}
// Reset lights for the next cycle
digitalWrite(amber, LOW);
digitalWrite(red, LOW);
digitalWrite(green, LOW);
debugMessage("Lights reset");
}
bool detectMotion(int pirSensor) {
return digitalRead(pirSensor) == HIGH;
}
void debugMessage(String message) {
Serial.println(message);
}