// Include necessary libraries
#include <NewPing.h>
// Define sensor pins
#define IR_SENSOR_1 2
#define IR_SENSOR_2 3
#define TRIGGER_PIN_1 4
#define ECHO_PIN_1 5
#define TRIGGER_PIN_2 6
#define ECHO_PIN_2 7
#define LDR_PIN A0
// Define LED pins
#define RED_LED 8
#define YELLOW_LED 9
#define GREEN_LED 10
// Define constants
#define MAX_DISTANCE 200 // Maximum distance for ultrasonic sensor
// Create NewPing objects for ultrasonic sensors
NewPing sonar1(TRIGGER_PIN_1, ECHO_PIN_1, MAX_DISTANCE);
NewPing sonar2(TRIGGER_PIN_2, ECHO_PIN_2, MAX_DISTANCE);
void setup() {
// Initialize serial communication
Serial.begin(9600);
// Set sensor pins as input
pinMode(IR_SENSOR_1, INPUT);
pinMode(IR_SENSOR_2, INPUT);
// Set LED pins as output
pinMode(RED_LED, OUTPUT);
pinMode(YELLOW_LED, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
}
void loop() {
// Read sensor values
int irSensor1State = digitalRead(IR_SENSOR_1);
int irSensor2State = digitalRead(IR_SENSOR_2);
unsigned int distance1 = sonar1.ping_cm();
unsigned int distance2 = sonar2.ping_cm();
int ldrValue = analogRead(LDR_PIN);
// Print sensor values for debugging
Serial.print("IR Sensor 1: "); Serial.println(irSensor1State);
Serial.print("IR Sensor 2: "); Serial.println(irSensor2State);
Serial.print("Distance 1: "); Serial.println(distance1);
Serial.print("Distance 2: "); Serial.println(distance2);
Serial.print("LDR Value: "); Serial.println(ldrValue);
// Decision-making logic for traffic light control
if (irSensor1State == HIGH || distance1 < 50) {
// Vehicle detected by IR sensor 1 or ultrasonic sensor 1
digitalWrite(GREEN_LED, HIGH);
digitalWrite(RED_LED, LOW);
delay(5000); // Green light for 5 seconds
} else if (irSensor2State == HIGH || distance2 < 50) {
// Vehicle detected by IR sensor 2 or ultrasonic sensor 2
digitalWrite(GREEN_LED, LOW);
digitalWrite(RED_LED, HIGH);
delay(5000); // Red light for 5 seconds
} else {
// No vehicle detected
digitalWrite(GREEN_LED, LOW);
digitalWrite(RED_LED, LOW);
digitalWrite(YELLOW_LED, HIGH);
delay(2000); // Yellow light for 2 seconds
digitalWrite(YELLOW_LED, LOW);
}
// Adjust LED brightness based on LDR value
int brightness = map(ldrValue, 0, 1023, 0, 255);
analogWrite(GREEN_LED, brightness);
analogWrite(YELLOW_LED, brightness);
analogWrite(RED_LED, brightness);
// Short delay before the next loop iteration
delay(500);
}