#include <Servo.h>
// Deklarasi pin untuk sensor Ultrasonik
const int trigPin = 9;
const int echoPin = 10;
const int ledm1=11;


// Variabel untuk menyimpan jarak dan jumlah barang
long duration;
int targetCount=1;
int distance;
int count = 0;        // Variabel penghitung barang
int threshold = 10;   // Batas jarak untuk mendeteksi barang (dalam cm)
bool objectDetected = false;  // Status deteksi objek
Servo servo;

void setup() {
  // Inisialisasi komunikasi Serial
  servo.attach(8);
  Serial.begin(9600);
  
  // Inisialisasi pin Trig sebagai output dan Echo sebagai input
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(ledm1, OUTPUT);
  servo.write(0);
}

void loop() {
  // Set trigPin ke LOW selama 2 mikrodetik untuk memastikan sinyal bersih
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  
  // Kirim sinyal ultrasonik dari trigPin
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  // Baca durasi sinyal yang diterima dari echoPin (dalam mikrodetik)
  duration = pulseIn(echoPin, HIGH);
  
  // Hitung jarak (dalam cm)
  distance = duration * 0.034 / 2;
  
  // Tampilkan hasil perhitungan jarak di Serial Monitor
 // Serial.print("Jarak: ");
 // Serial.print(distance);
 // Serial.println(" cm");

  // Deteksi jika ada barang dalam jarak threshold
  if (distance < threshold && !objectDetected) {
    // Jika jarak kurang dari threshold dan belum terdeteksi, tambahkan penghitung
    count++;
    objectDetected = true;  // Set status menjadi terdeteksi
    digitalWrite(ledm1, LOW);
    Serial.print("Jumlah barang: ");
    Serial.println(count);
  }

  // Reset status deteksi jika barang menjauh (di luar threshold)
  if (distance >= threshold && objectDetected) {
    objectDetected = false;
    digitalWrite(ledm1, HIGH);
  }
  if(count>=targetCount){
    servo.write(90);
    delay(500);
    servo.write(0);
    count=0;
  }
  
  // Delay sebelum melakukan pengukuran lagi
  delay(200);
}