#include <ESP32Servo.h>
const int IR_SENSOR_1 = 12; // Driveway
const int IR_SENSOR_2 = 13; // GF
const int IR_SENSOR_3 = 14; // 2F
const int SERVO_PIN = 18;
const int PUSH_BUTTON = 0;
const int LED_1_RED = 2;
const int LED_1_GREEN = 19;
const int LED_2_RED = 4;
const int LED_2_GREEN = 5;
const int LED_3_RED = 16;
const int LED_3_GREEN = 17;
Servo servo;
void setup() {
Serial.begin(115200);
pinMode(IR_SENSOR_1, INPUT);
pinMode(IR_SENSOR_2, INPUT);
pinMode(IR_SENSOR_3, INPUT);
pinMode(SERVO_PIN, OUTPUT);
pinMode(PUSH_BUTTON, INPUT);
pinMode(LED_1_RED, OUTPUT);
pinMode(LED_1_GREEN, OUTPUT);
pinMode(LED_2_RED, OUTPUT);
pinMode(LED_2_GREEN, OUTPUT);
pinMode(LED_3_RED, OUTPUT);
pinMode(LED_3_GREEN, OUTPUT);
servo.attach(SERVO_PIN);
servo.write(0); // Initialize servo to closed position
}
void loop() {
int irSensor1State = digitalRead(IR_SENSOR_1);
int irSensor2State = digitalRead(IR_SENSOR_2);
int irSensor3State = digitalRead(IR_SENSOR_3);
int pushButtonState = digitalRead(PUSH_BUTTON);
// Logic for boom barrier control
if (irSensor1State == HIGH || irSensor2State == HIGH || irSensor3State == HIGH) {
// If any IR sensor detects a car, close the boom barrier
servo.write(0);
} else {
// If no cars are detected, open the boom barrier
servo.write(180);
}
// Manual override with push button
if (pushButtonState == HIGH) {
// Toggle boom barrier state
if (servo.read() == 0) {
servo.write(180);
} else {
servo.write(0);
}
delay(500); // Debounce
}
// LED indicators
if (irSensor1State == HIGH) {
digitalWrite(LED_1_RED, HIGH);
digitalWrite(LED_1_GREEN, LOW);
} else {
digitalWrite(LED_1_RED, LOW);
digitalWrite(LED_1_GREEN, HIGH);
}
if (irSensor2State == HIGH) {
digitalWrite(LED_2_RED, HIGH);
digitalWrite(LED_2_GREEN, LOW);
} else {
digitalWrite(LED_2_RED, LOW);
digitalWrite(LED_2_GREEN, HIGH);
}
if (irSensor3State == HIGH) {
digitalWrite(LED_3_RED, HIGH);
digitalWrite(LED_3_GREEN, LOW);
} else {
digitalWrite(LED_3_RED, LOW);
digitalWrite(LED_3_GREEN, HIGH);
}
delay(50);
}