#include <ESP32Servo.h>
#define pirPinDoor 23
#define pirPinInterrupt 22
#define buzzerPin 21
#define servoPin 16
bool lock_status = false;
bool force_open = false;
int pos = 0;
int key = 0;
Servo myServo;
void openDoor(){
for (pos = 0; pos < 90; pos += 1) {
myServo.write(pos);
delay(10);
}
}
void closeDoor(){
for (pos = 90; pos > 0; pos -= 1) {
myServo.write(pos);
delay(10);
}
}
void IRAM_ATTR interruptDoor() {
if(lock_status == true && force_open == false) force_open = true;
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(pirPinDoor, INPUT);
pinMode(buzzerPin, OUTPUT);
myServo.attach(servoPin, 500, 2400);
attachInterrupt(pirPinInterrupt, interruptDoor, HIGH);
// check either door is lock or not
if(pos == 90) {
Serial.println("Motor Servo from 90 to 0");
closeDoor();
}
}
void loop() {
key = digitalRead(pirPinDoor);
if(force_open == true){
Serial.println("Intruder : True");
tone(buzzerPin, 500);
delay(1000);
force_open = false;
} else {
noTone(buzzerPin);
}
if(key == HIGH){
if(lock_status == true) {
Serial.println("Door : Open");
if(pos == 0) {
Serial.println("Motor Servo from 0 to 90");
openDoor();
}
lock_status = false;
}
} else {
if(lock_status == false) {
Serial.println("Door : Close");
if(pos == 90) {
Serial.println("Motor Servo from 90 to 0");
closeDoor();
}
lock_status = true;
}
}
}