#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define widthSize 128
#define heightSize 64
Adafruit_SSD1306 screenUnit(widthSize, heightSize, &Wire, -1);
int greenLamp = 2;
int yellowLamp = 3;
int redLamp = 4;
int soundAlert = 5;
int triggerPin = 6;
int echoPin = 7;
long waveDuration;
int objectDistance;
void setup() {
pinMode(greenLamp, OUTPUT);
pinMode(yellowLamp, OUTPUT);
pinMode(redLamp, OUTPUT);
pinMode(soundAlert, OUTPUT);
pinMode(triggerPin, OUTPUT);
pinMode(echoPin, INPUT);
screenUnit.begin(SSD1306_SWITCHCAPVCC, 0x3C);
screenUnit.clearDisplay();
}
void loop() {
digitalWrite(greenLamp, HIGH);
digitalWrite(yellowLamp, LOW);
digitalWrite(redLamp, LOW);
delay(10000);
digitalWrite(greenLamp, LOW);
digitalWrite(yellowLamp, HIGH);
digitalWrite(redLamp, LOW);
delay(10000);
digitalWrite(greenLamp, LOW);
digitalWrite(yellowLamp, LOW);
digitalWrite(redLamp, HIGH);
unsigned long redTimer = millis();
while (millis() - redTimer < 10000) {
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
waveDuration = pulseIn(echoPin, HIGH);
objectDistance = waveDuration * 0.034 / 2;
if (objectDistance < 10) {
digitalWrite(soundAlert, HIGH);
screenUnit.clearDisplay();
screenUnit.setTextSize(1);
screenUnit.setTextColor(WHITE);
screenUnit.setCursor(0, 20);
screenUnit.println("Red Light Crossed");
screenUnit.display();
} else {
digitalWrite(soundAlert, LOW);
screenUnit.clearDisplay();
screenUnit.display();
}
}
digitalWrite(redLamp, LOW);
}