#include <Wire.h>                 // Library untuk I2C
#include <LiquidCrystal_I2C.h>    // Library untuk LCD I2C
#include <Servo.h>                // Library untuk Servo Motor

// Inisialisasi LCD 16x2 dengan alamat I2C 0x27
LiquidCrystal_I2C lcd(0x27, 16, 2);

// Pin sensor ultrasonik 1 (deteksi sampah)
const int trigPin1 = 7;
const int echoPin1 = 6;

// Pin sensor ultrasonik 2 (deteksi tangan)
const int trigPin2 = 9;
const int echoPin2 = 8;

// Servo motor
Servo servo;
const int servoPin = 3;

// Variabel untuk menyimpan jarak
long duration1, duration2;
int distance1, distance2;

void setup() {
  // Inisialisasi Serial Monitor
  Serial.begin(9600);

  // Konfigurasi pin
  pinMode(trigPin1, OUTPUT);
  pinMode(echoPin1, INPUT);
  pinMode(trigPin2, OUTPUT);
  pinMode(echoPin2, INPUT);

  // Inisialisasi servo motor
  servo.attach(servoPin);
  servo.write(0); // Tutup awalnya

  // Inisialisasi LCD
  lcd.init();
  lcd.backlight();

  // Pesan awal di LCD
  lcd.setCursor(0, 0);
  lcd.print("Tempat Sampah");
  delay(2000);
  lcd.clear();
}

void loop() {
  // Baca jarak dari Ultrasonik 1 (deteksi sampah)
  digitalWrite(trigPin1, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin1, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin1, LOW);
  duration1 = pulseIn(echoPin1, HIGH);
  distance1 = duration1 * 0.034 / 2;

  // Baca jarak dari Ultrasonik 2 (deteksi tangan)
  digitalWrite(trigPin2, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin2, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin2, LOW);
  duration2 = pulseIn(echoPin2, HIGH);
  distance2 = duration2 * 0.034 / 2;

  // Logika untuk menampilkan status sampah
  if (distance1 <= 5) { // Jika jarak <= 5 cm, sampah penuh
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Status: PENUH");
    servo.write(0); // Pastikan tutup tetap tertutup
  } else {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Status: TERSEDIA");
  }

  // Logika untuk membuka tutup saat tangan terdeteksi
  if (distance2 <= 10) { // Jika jarak <= 10 cm, buka tutup
    servo.write(90); // Buka tutup
    delay(2000); // Tunggu 2 detik
    servo.write(0); // Tutup kembali
  }

  delay(500); // Tunggu 0,5 detik sebelum membaca ulang
}
$abcdeabcde151015202530354045505560fghijfghij