#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define TRIG 19
#define ECHO 18
#define RED_LED 17
#define YELLOW_LED 16
#define GREEN_LED 4
#define BUZZER 0
LiquidCrystal_I2C lcd(0x27, 16, 2);
long duration;
float distance;
void setup() {
Serial.begin(115200);
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(RED_LED, OUTPUT);
pinMode(YELLOW_LED, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(BUZZER, OUTPUT);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Distance Meter");
delay(2000);
lcd.clear();
}
void loop() {
// Trigger ultrasonic pulse
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
// Read echo
duration = pulseIn(ECHO, HIGH);
// Calculate distance
distance = duration * 0.034 / 2;
Serial.print("Distance: ");
Serial.println(distance);
// Display on LCD
lcd.setCursor(0, 0);
lcd.print("Distance: ");
lcd.setCursor(0, 1);
lcd.print(distance);
lcd.print(" cm");
// LED + Buzzer logic
if (distance < 100) {
digitalWrite(RED_LED, HIGH);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(GREEN_LED, LOW);
digitalWrite(BUZZER, HIGH);
}
else if (distance >= 100 && distance < 200) {
digitalWrite(RED_LED, LOW);
digitalWrite(YELLOW_LED, HIGH);
digitalWrite(GREEN_LED, LOW);
digitalWrite(BUZZER, LOW);
}
else {
digitalWrite(RED_LED, LOW);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(GREEN_LED, HIGH);
digitalWrite(BUZZER, LOW);
}
delay(500);
}