#include <Servo.h>

const int trigPin = 9;
const int echoPin = 10;
const int ledPin = 13;
const int servoPin = 6;

Servo myServo;

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(ledPin, OUTPUT);
  
  myServo.attach(servoPin);
  myServo.write(0);  // Tempat sampah tertutup
  
  Serial.begin(9600);
}

void loop() {
  long duration, distance;
  
  // Mengirimkan gelombang ultrasonik
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  // Membaca durasi pantulan gelombang
  duration = pulseIn(echoPin, HIGH);
  
  // Menghitung jarak
  distance = duration * 0.034 / 2;
  
  // Menampilkan jarak di serial monitor
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println("cm") ;
  
  // Logika membuka dan menutup tutup tempat sampah
  if (distance <= 30) {  // Jika jarak kurang dari atau sama dengan 30 cm
    digitalWrite(ledPin, HIGH);  // Nyalakan LED
    myServo.write(90);  // Buka tutup tempat sampah
  } else {
    digitalWrite(ledPin, LOW);  // Matikan LED
    myServo.write(0);  // Tutup tempat sampah
  }
  
  delay(500);  // Delay untuk stabilitas pembacaan sensor
}