#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,4);
const int trigPin = 6;
const int echoPin = 4;
const int buzzerPin = 11;
const int greenLED = 7;
const int yellowLED = 10;
const int redLED = 13;
//Setup LCD
void setup (){
lcd.init();
lcd.backlight();
//Setup all pin LCD,buzzer and LED
pinMode (trigPin, OUTPUT);
pinMode (echoPin, INPUT);
pinMode (buzzerPin, OUTPUT);
pinMode (greenLED, OUTPUT);
pinMode (yellowLED, OUTPUT);
pinMode (redLED, OUTPUT);
}
void loop (){
//Send pulse to ultrasonic sensor
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
//Calculate the duration it takes for pulse to return
long duration = pulseIn(echoPin, HIGH);
//Calculate distance in cm
int distance = duration * 0.034/2;
if (distance < 50) { //close range
tone(buzzerPin, 1000); //continuous sound
digitalWrite(buzzerPin, HIGH);
digitalWrite(redLED, HIGH); //Blink red LED
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
delay(100); //Blink duration
digitalWrite(buzzerPin, LOW); //buzzer pulse
digitalWrite(redLED, LOW); //LED blinking
delay(100); }
else if (distance >= 50 && distance <=100 ) { //mid range
tone(buzzerPin, 600); //continuous sound
digitalWrite(buzzerPin, HIGH);
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, HIGH); //Blink yellow LED
digitalWrite(greenLED, LOW);
delay(250); //Blink duration
digitalWrite(buzzerPin, LOW); //buzzer pulse
digitalWrite(yellowLED, LOW);
delay(250); }
else if (distance >= 100 && distance <=200) {
tone(buzzerPin, 300); //continuous sound
digitalWrite(buzzerPin, HIGH);
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, HIGH); }
else {
noTone(buzzerPin); // Stop buzzer if out of range
digitalWrite(greenLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(redLED, LOW); }
//Display distance in LCD
lcd.setCursor(0,0);
lcd.print("Distance: ");
lcd.print(distance);
lcd.print(" cm");
}