#include <ESP32Servo.h>
#define TRIGGER_PIN 12
#define ECHO_PIN 13
#define SERVO_PIN 14
#define BUTTON_PIN 15
#define LED_PIN 16 // Example pin for LED indicator
Servo servo;
int buttonState = 0;
unsigned long manualOverrideStartTime = 0;
const unsigned long manualOverrideTimeout = 10000; // 10 seconds timeout for manual override
void setup() {
Serial.begin(9600);
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(SERVO_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
servo.attach(SERVO_PIN);
}
void loop() {
buttonState = digitalRead(BUTTON_PIN);
if (buttonState == HIGH) {
// Manual override
servo.write(90);
manualOverrideStartTime = millis(); // Record the time manual override started
digitalWrite(LED_PIN, HIGH);
delay(3000);
// Turn on LED indicator
digitalWrite(LED_PIN, LOW);
} else {
// Check if manual override timeout has elapsed
if (millis() - manualOverrideStartTime >= manualOverrideTimeout) {
servo.write(0); // Lock the door
digitalWrite(LED_PIN, LOW); // Turn off LED indicator
}
// Ultrasonic sensor logic (unchanged from previous code)
long duration, distance;
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = duration * 0.034 / 2;
if (distance < 10) {
// Detected presence, unlock the door
servo.write(90);
delay(2000);
servo.write(0);
}
}
}