#include <Servo.h>
#include <LiquidCrystal_I2C.h>
#define SERVO_PIN 7
#define PIR_PIN 8
#define BUZZER_PIN 9 // Pin buzzer
#define BUZZER_DELAY 500 // Durasi bunyi buzzer (ms)
bool motionDetected = false;
bool doorLocked = true;
Servo doorLock;
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 16, 2);
void setup() {
pinMode(PIR_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT); // Set pin buzzer sebagai OUTPUT
doorLock.attach(SERVO_PIN);
doorLock.write(0);
LCD.init();
LCD.backlight();
LCD.setCursor(0, 0);
LCD.print("Smart Door Lock");
}
void loop() {
motionDetected = digitalRead(PIR_PIN);
if (motionDetected) {
if(doorLocked){
unlockDoor();
} else {
lockDoor();
}
}
delay(200);
}
void unlockDoor() {
doorLocked = false;
LCD.clear();
LCD.setCursor(0, 0);
LCD.print("Motion Detected");
LCD.setCursor(0, 1);
LCD.print("Door Unlocked");
soundBuzzer(); // Panggil fungsi untuk bunyi buzzer
delay(1000);
LCD.clear();
LCD.print("Selamat Datang");
doorLock.write(180);
delay(5000);
doorLocked = true;
lockDoor();
}
void lockDoor() {
doorLock.write(0);
LCD.clear();
LCD.setCursor(0, 0);
LCD.print("Door Locked");
soundBuzzer(); // Panggil fungsi untuk bunyi buzzer
}
void soundBuzzer() {
tone(BUZZER_PIN, 1000); // Menghasilkan nada 1000 Hz pada pin buzzer
delay(BUZZER_DELAY); // Delay untuk durasi bunyi buzzer
noTone(BUZZER_PIN); // Matikan bunyi buzzer
}