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

// Inisialisasi LCD dengan alamat I2C 0x27 dan ukuran 16x2 (2 baris, 16 karakter per baris).
LiquidCrystal_I2C lcd(0x27, 16, 2);  // Alamat I2C LCD mungkin berbeda.

// Inisialisasi sensor ultrasonik NewPing dengan pin Trigger di 10, pin Echo di 9, dan jarak maksimum 200 cm.
NewPing sonar(10, 9, 200);  // Trigger pin, Echo pin, Max distance.

// Inisialisasi pin-pin untuk LDR, LED, dan buzzer.
const int ldrPin = A0;
const int ledPin = 7;
const int buzzerPin = 6;

// Variabel untuk melacak apakah deteksi telah terjadi.
boolean isDetected = false;

void setup() {
  // Atur pin LED dan buzzer sebagai output.
  pinMode(ledPin, OUTPUT);
  pinMode(buzzerPin, OUTPUT);
  
  // Inisialisasi LCD, hidupkan pencahayaan (backlight).
  lcd.init();
  lcd.backlight();
  
  // Set posisi kursor di baris 0, kolom 0, dan tampilkan pesan selama 5 detik.
  lcd.setCursor(0, 0);
  lcd.print("     HELLO ");
  lcd.setCursor(0, 1);
  lcd.print("MUHAMMADHAMZAMIR");
  delay(5000);
}

void loop() {
  // Baca nilai dari sensor LDR.
  int ldrValue = analogRead(ldrPin);  // Membaca nilai sensor LDR
  
  // Mengukur jarak dengan sensor ultrasonik.
  int distance = sonar.ping_cm();  // Mengukur jarak dengan sensor ultrasonik

  // Fungsi LED
  if (ldrValue > 500) {
    digitalWrite(ledPin, HIGH); // Nyalakan LED saat lingkungan gelap.
  } else {
    digitalWrite(ledPin, LOW); // Matikan LED saat lingkungan terang.
  }

  // Fungsi deteksi maling
  if (distance <= 100) {
    // Jika belum ada deteksi sebelumnya
    if (!isDetected) {
      digitalWrite(buzzerPin, HIGH); // Nyalakan buzzer
      lcd.clear(); // Bersihkan layar LCD
      lcd.setCursor(0, 0); // Set posisi kursor ke baris 0, kolom 0
      lcd.print("MALING TERDETEK!"); // Tampilkan pesan "MALING TERDETEK!"
      isDetected = true; // Set isDetected menjadi benar (true) karena terjadi deteksi
    }
  }
  else {
    digitalWrite(buzzerPin, LOW); // Matikan buzzer
    isDetected = false; // Set isDetected menjadi salah (false) karena tidak ada deteksi
    lcd.clear(); // Bersihkan layar LCD
    lcd.setCursor(0, 0); // Set posisi kursor ke baris 0, kolom 0
    lcd.print("      AMAN !"); // Tampilkan pesan "AMAN!"
    lcd.setCursor(0, 1); // Set posisi kursor ke baris 1, kolom 0
    lcd.print(""); // Tampilkan teks kosong di baris kedua
  }
  
  // Tunggu selama 1 detik sebelum mengulangi loop
  delay(1000);
}