#include <ESP32Servo.h>
#define TRIG_PIN 23
#define ECHO_PIN 22
#define SERVO_PIN 26
#define DISTANCE_THRESHOLD 40
Servo servo;
float duration_us, distance_cm;
int door_position = 0; // 0 - closed, 1 - opened
int can_open = 1; // True/False
int can_close = 0; // True/False
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
servo.attach(SERVO_PIN);
servo.write(90);
// put your setup code here, to run once:
//Serial.begin(115200);
//Serial.println("Hello, ESP32!");
}
void loop() {
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration_us = pulseIn(ECHO_PIN, HIGH);
distance_cm = 0.017 * duration_us;
if (distance_cm != 0.00 && distance_cm < DISTANCE_THRESHOLD && can_open == 1 && door_position == 0) {
servo.write(0); // to open
door_position = 1;
can_open = 0;
}
if (distance_cm > DISTANCE_THRESHOLD && door_position == 1) {
can_close = 1;
}
if (can_close == 1 && door_position == 1 && distance_cm < DISTANCE_THRESHOLD) {
delay(1000);
servo.write(90); // to close
door_position = 0;
can_open = 1;
can_close = 0;
delay(3000);
}
// //servo.write(90);
//if else {
// is_open = 0;
//servo.write(0);
//}
Serial.print(door_position);
Serial.print(can_open);
Serial.print(can_close);
Serial.print("distance: ");
Serial.print(distance_cm);
Serial.print(" cm \n");
delay(500);
}