#include <ESP32Servo.h>
#include <LiquidCrystal_I2C.h>
#define SERVO_PIN 14
#define PIR_PIN 25
bool motionDetected = false;
bool doorLocked = true;
Servo doorLock;
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 16, 2);
void setup() {
Serial.begin(115200);
pinMode(17, OUTPUT);
Serial.println("Hello, ESP32!");
pinMode(PIR_PIN, INPUT);
doorLock.attach(SERVO_PIN);
doorLock.write(0);
LCD.init();
LCD.backlight();
LCD.setCursor(0, 0);
LCD.println("welcome");
Serial.println("doorlock");
}
void loop() {
motionDetected = digitalRead(PIR_PIN);
if (motionDetected) {
if(doorLocked){
digitalWrite(17, HIGH);
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");
Serial.println("door Unlock");
doorLock.write(90);
delay(5000);
doorLocked = true;
lockDoor();
}
void lockDoor() {
doorLock.write(0);
LCD.clear();
LCD.setCursor(0, 0);
LCD.print("Door Locked");
Serial.println("door lock");
digitalWrite(17, LOW);
}