#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int trigPin = 5;
int echoPin = 6;
float duration, cm;
int trigPins = 7;
int echoPins = 8;
float durations, cms;
Servo servoOpen;
const int buzzerPin = 10;
int previousStatus = 0; // Variabel untuk menyimpan status level sampah sebelumnya
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(trigPins, OUTPUT);
pinMode(echoPins, INPUT);
servoOpen.attach(9);
servoOpen.write(0);
pinMode(buzzerPin, OUTPUT);
updateLCD();
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
digitalWrite(trigPins, LOW);
delayMicroseconds(2);
digitalWrite(trigPins, HIGH);
delayMicroseconds(10);
digitalWrite(trigPins, LOW);
durations = pulseIn(echoPins, HIGH);
cm = (duration / 2) / 29.1;
cms = (durations / 2) / 29.1;
if (cm <= 250) {
servoOpen.write(90);
digitalWrite(buzzerPin, LOW); // Matikan buzzer saat tempat sampah terbuka
delay(500);
} else {
servoOpen.write(0);
// Cek apakah status level sampah berubah dari "Penuh" ke status lainnya
if (previousStatus == 1) {
digitalWrite(buzzerPin, HIGH); // Nyalakan buzzer saat status "Penuh"
delay(1000); // Waktu buzzer menyala (dapat disesuaikan)
} else {
digitalWrite(buzzerPin, LOW); // Matikan buzzer saat tempat sampah tertutup dan tidak penuh
}
// Simpan status level sampah sekarang sebagai status sebelumnya
previousStatus = 0;
}
updateLCD();
}
void updateLCD() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Level Sampah :");
lcd.setCursor(0, 1);
if (cms >= 210 && cms <= 300) {
lcd.print("Sedikit");
previousStatus = 0; // Set status sebelumnya menjadi 0 ("Sedikit")
} else if (cms <= 209 && cms >= 70) {
lcd.print("Setengah");
previousStatus = 0; // Set status sebelumnya menjadi 0 ("Setengah")
} else if (cms >= 0 && cms <= 69) {
lcd.print("Penuh");
previousStatus = 1; // Set status sebelumnya menjadi 1 ("Penuh")
} else {
lcd.print("Kosong");
previousStatus = 0; // Set status sebelumnya menjadi 0 ("Kosong")
}
}