#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define RED1 2
#define YELLOW1 4
#define GREEN1 5
#define RED2 14
#define YELLOW2 27
#define GREEN2 32
#define RED3 26
#define YELLOW3 25
#define GREEN3 33
#define IR_SENSOR 15 // Vehicle detection
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Smart Traffic");
lcd.setCursor(0, 1);
lcd.print("Management...");
pinMode(RED1, OUTPUT);
pinMode(YELLOW1, OUTPUT);
pinMode(GREEN1, OUTPUT);
pinMode(RED2, OUTPUT);
pinMode(YELLOW2, OUTPUT);
pinMode(GREEN2, OUTPUT);
pinMode(RED3, OUTPUT);
pinMode(YELLOW3, OUTPUT);
pinMode(GREEN3, OUTPUT);
pinMode(IR_SENSOR, INPUT);
}
void trafficCycle(int r, int y, int g) {
digitalWrite(r, HIGH);
digitalWrite(y, LOW);
digitalWrite(g, LOW);
delay(5000); // Red light for 5 sec
digitalWrite(r, LOW);
digitalWrite(y, HIGH);
delay(2000); // Yellow light for 2 sec
digitalWrite(y, LOW);
digitalWrite(g, HIGH);
delay(5000); // Green light for 5 sec
digitalWrite(g, LOW);
}
void loop() {
int vehicleDetected = digitalRead(IR_SENSOR);
if (vehicleDetected == LOW) { // If vehicle present
Serial.println("Vehicle detected!");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Vehicle Detected!");
delay(2000);
}
// Traffic Light 1 Cycle
trafficCycle(RED1, YELLOW1, GREEN1);
// Traffic Light 2 Cycle
trafficCycle(RED2, YELLOW2, GREEN2);
// Traffic Light 3 Cycle
trafficCycle(RED3, YELLOW3, GREEN3);
}