#include <Wire.h>
#include <LiquidCrystal_I2C.h>
int ledMerah = 13; // Pin untuk LED merah
int inputPir = 2; // Pin untuk sensor PIR
int pirState = LOW; // Status awal sensor PIR
int pinBuzzer = 10; // Pin untuk buzzer
LiquidCrystal_I2C lcd(0x27,16,2); // Inisialisasi LCD dengan alamat 0x27, dan ukuran 16x2
void setup() {
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Nyalakan backlight LCD
pinMode(ledMerah, OUTPUT); // Set pin LED merah sebagai output
pinMode(inputPir, INPUT); // Set pin sensor PIR sebagai input
pinMode(pinBuzzer, OUTPUT); // Set pin buzzer sebagai output
Serial.begin(9600); // Inisialisasi komunikasi serial dengan baud rate 9600
}
void loop() {
int val = digitalRead(inputPir); // Baca nilai dari sensor PIR
if (val == HIGH) {
// Sensor PIR mendeteksi gerakan
digitalWrite(ledMerah, HIGH); // Nyalakan LED merah
playTone(300, 160); // Mainkan nada buzzer
if (pirState == LOW) {
// Ubah status pirState menjadi HIGH jika sebelumnya LOW
lcd.setCursor(0, 0);
lcd.print("Awas ada maling");
Serial.println("Awas ada maling");
pirState = HIGH;
}
} else {
// Sensor PIR tidak mendeteksi gerakan
digitalWrite(ledMerah, LOW); // Matikan LED merah
playTone(0, 0); // Hentikan nada buzzer
delay(300);
if (pirState == HIGH) {
// Ubah status pirState menjadi LOW jika sebelumnya HIGH
lcd.clear(); // Hapus tampilan LCD
pirState = LOW;
}
}
}
void playTone(long duration, int freq) {
duration *= 1000; // Konversi durasi ke mikrodetik
int period = (1.0 / freq) * 1000000; // Hitung periode
long elapsed_time = 0;
while (elapsed_time < duration) {
digitalWrite(pinBuzzer, HIGH); // Nyalakan buzzer
delayMicroseconds(period / 2); // Tunda setengah periode
digitalWrite(pinBuzzer, LOW); // Matikan buzzer
delayMicroseconds(period / 2); // Tunda setengah periode
elapsed_time += (period); // Akumulasi waktu yang telah berlalu
}
}