#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int trigPin = 9;
const int echoPin = 10;
const int thresholdDistance = 10;
const int maxDistance = 80;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.clear();
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
long duration;
int distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
lcd.setCursor(0, 0);
lcd.print("Distance: ");
lcd.print(distance);
lcd.print(" cm");
float percentageFilled = ((float)(maxDistance - distance) / maxDistance) * 100;
Serial.print("Percentage Filled: ");
Serial.print(percentageFilled);
Serial.println("%");
if (distance < thresholdDistance && distance < maxDistance) {
Serial.println("Alert: Dustbin is almost full!");
lcd.setCursor(0, 1);
lcd.print("Dustbin Full!");
digitalWrite(LED_BUILTIN, HIGH);
} else if (distance >= maxDistance) {
Serial.println("Dustbin is empty.");
lcd.setCursor(0, 1);
lcd.print("Dustbin Empty");
digitalWrite(LED_BUILTIN, LOW);
} else {
lcd.setCursor(0, 1);
lcd.print(" ");
digitalWrite(LED_BUILTIN, LOW);
}
delay(4000);
}