const int IR_SENSOR_PIN_1 = 2;
const int IR_SENSOR_PIN_2 = 6;
const int PHOTO_RESISTOR_PIN = A0;
const int RED_LED_PIN = 3;
const int YELLOW_LED_PIN = 4;
const int GREEN_LED_PIN = 5;
const int TIMEOUT = 5000; // 5 seconds timeout for each traffic light state
void setup() {
  pinMode(IR_SENSOR_PIN_1, INPUT);
  pinMode(IR_SENSOR_PIN_2, INPUT);
  pinMode(PHOTO_RESISTOR_PIN, INPUT);
  pinMode(RED_LED_PIN, OUTPUT);
  pinMode(YELLOW_LED_PIN, OUTPUT);
  pinMode(GREEN_LED_PIN, OUTPUT);
  Serial.begin(9600);
}
void loop() {
  int sensorValue1 = digitalRead(IR_SENSOR_PIN_1);
  int sensorValue2 = digitalRead(IR_SENSOR_PIN_2);
  int photoValue = analogRead(PHOTO_RESISTOR_PIN);
  
  if (sensorValue1 == HIGH || sensorValue2 == HIGH) { // vehicle detected
    Serial.println("Vehicle detected!");
    greenLight();
  } else { // no vehicle detected
    Serial.println("No vehicle detected.");
    if (photoValue > 500) {
      greenLight();
    } else {
      redLight();
    }
  }
}
void redLight() {
  digitalWrite(RED_LED_PIN, HIGH);
  digitalWrite(YELLOW_LED_PIN, LOW);
  digitalWrite(GREEN_LED_PIN, LOW);
  delay(TIMEOUT);
}
void greenLight() {
  digitalWrite(RED_LED_PIN, LOW);
  digitalWrite(YELLOW_LED_PIN, LOW);
  digitalWrite(GREEN_LED_PIN, HIGH);
  delay(TIMEOUT);
  yellowLight();
}
void yellowLight() {
  digitalWrite(RED_LED_PIN, LOW);
  digitalWrite(YELLOW_LED_PIN, HIGH);
  digitalWrite(GREEN_LED_PIN, LOW);
  delay(TIMEOUT/2);
  redLight();
}