#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

Servo servo1; // servo kiri
Servo servo2; // servo kanan
int potValue1; // sensor proximity induktif
int potValue2; // sensor proximity kapasitif
LiquidCrystal_I2C lcd(0x27, 16, 2);

const int trigPin1 = 2; // Pin trigger sensor ultrasonik 1
const int echoPin1 = 3; // Pin echo sensor ultrasonik 1
const int trigPin2 = 4; // Pin trigger sensor ultrasonik 2
const int echoPin2 = 5; // Pin echo sensor ultrasonik 2
int pirSensorValue = 6;

long duration1;
long duration2;
int distance1;
int distance2;
float volumeOrganik;
float volumeAnorganik;
float maxVolume = 300; // Kapasitas maksimum tempat sampah (ml)

bool isMoving = false;
bool isOrganikFullNotified = false; 
bool isAnorganikFullNotified = false; 
unsigned long moveStartTime;
unsigned long moveDuration = 1000; // Durasi pergerakan servo (ms)

void setup() {
  servo1.attach(9);
  servo2.attach(10);
  servo1.write(150); // Set posisi awal servo 1 ke sudut 150
  servo2.write(30);  // Set posisi awal servo 2 ke sudut 30
  lcd.init();
  lcd.backlight();
  pinMode(trigPin1, OUTPUT);
  pinMode(echoPin1, INPUT);
  pinMode(trigPin2, OUTPUT);
  pinMode(echoPin2, INPUT);
  pinMode(6, INPUT); // Pin sensor PIR
}

void loop() {
  // Membaca nilai potensiometer 1
  potValue1 = analogRead(A0);
  // Membaca nilai potensiometer 2
  potValue2 = analogRead(A1);
  // Membaca nilai sensor PIR
  pirSensorValue = digitalRead(6);

  // Membaca jarak dari sensor ultrasonik 1
  digitalWrite(trigPin1, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin1, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin1, LOW);
  duration1 = pulseIn(echoPin1, HIGH);
  distance1 = duration1 * 0.034 / 2;

  // Membaca jarak dari sensor ultrasonik 2
  digitalWrite(trigPin2, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin2, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin2, LOW);
  duration2 = pulseIn(echoPin2, HIGH);
  distance2 = duration2 * 0.034 / 2;

    // Menampilkan nilai potensiometer ke terminal
  Serial.print("Potensiometer 1: ");
  Serial.println(potValue1);
  Serial.print("Potensiometer 2: ");
  Serial.println(potValue2);

  // Menghitung volume tempat sampah dalam persen
  volumeOrganik = (maxVolume - distance1) / maxVolume * 100.0; // Volume organik dalam persen
  volumeAnorganik = (maxVolume - distance2) / maxVolume * 100.0; // Volume anorganik dalam persen

  if (potValue1 > 1 && potValue2 > 1) {
    servo1.write(120);
    isMoving = true; // Aktifkan perintah bergerak
    moveStartTime = millis(); // Catat waktu mulai pergerakan
  } else if (potValue1 == 0 && potValue2 > 1) {
    servo2.write(100); // Gerakkan servo2 ke sudut 100
    isMoving = true;
    moveStartTime = millis();
  } else if (potValue1 > 1 && potValue2 == 0) {
    servo1.write(120);
    isMoving = true;
    moveStartTime = millis();
  } else if (pirSensorValue == HIGH) {
    servo2.write(120);
    isMoving = true;
    moveStartTime = millis();
  } else {
    // Jika tidak ada perintah bergerak aktif
    servo1.write(150); // Set posisi awal servo 1 ke sudut 150
    servo2.write(30);  // Set posisi awal servo 2 ke sudut 30
  }
  
  delay(1000); // Tunggu 1 detik

  // Tampilkan "smarttrashku.com" di awal dan jeda 10 detik
  lcd.clear();
  lcd.setCursor(4, 0);
  lcd.print("WELCOME");
  lcd.setCursor(0, 1);
  lcd.print("KELOMPOK DUA :D");
  delay(5000); // Jeda selama 10 detik

  lcd.clear();
  lcd.setCursor(4, 0);
  lcd.print("INFORMASI");
  lcd.setCursor(3, 1);
  lcd.print("DATA SAMPAH");
  delay(500); // Jeda selama 10 detik

  lcd.clear();
  lcd.setCursor(2, 0);
  lcd.print("VOL. ORGANIK");
  lcd.setCursor(6, 1);
  lcd.print(volumeOrganik);
  lcd.print("%");
  delay(500); // Jeda selama 10 detik

  lcd.clear();
  lcd.setCursor(1, 0);
  lcd.print("VOL. ANORGANIK");
  lcd.setCursor(5, 1);
  lcd.print(volumeAnorganik);
  lcd.print("%");
  delay(500); // Jeda selama 10 detik

  // Cek apakah tempat sampah organik penuh
  if (volumeOrganik >= 90 && !isOrganikFullNotified) {
    // Tempat sampah organik sudah 100% penuh, tampilkan notifikasi
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("TEMPAT SAMPAH");
    lcd.setCursor(0, 1);
    lcd.print("ORGANIK PENUH!");
    isOrganikFullNotified = true; // Set flag notifikasi penuh untuk organik
    delay(500); // Tahan notifikasi selama 2 detik
  }

  // Cek apakah tempat sampah anorganik penuh
  if (volumeAnorganik >= 90 && !isAnorganikFullNotified) {
    // Tempat sampah anorganik sudah 100% penuh, tampilkan notifikasi
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("TEMPAT SAMPAH");
    lcd.setCursor(0, 1);
    lcd.print("ANORGANIK PENUH!");
    isAnorganikFullNotified = true; // Set flag notifikasi penuh untuk anorganik
    delay(500); // Tahan notifikasi selama 2 detik
  }

  


}
$abcdeabcde151015202530fghijfghij