#include <ESP32Servo.h>
#include <NewPing.h>

// Define pins
#define SERVO_PIN 13
#define TRIG_PIN 12
#define ECHO_PIN 14
#define GREEN_LED_PIN 26
#define RED_LED_PIN 27
#define BUTTON_PIN 32

// Servo motor object
Servo myServo;

// Ultrasonic sensor object
NewPing sonar(12, 14, 400);

// Door state
bool isOpen = false;

// Button state
bool buttonPressed = false;

void setup() {
  // Initialize servo motor
    myServo.attach(13);
      myServo.write(0); // Close the door initially

        // Initialize ultrasonic sensor
          pinMode(12, OUTPUT);
            pinMode(14, INPUT);

              // Initialize LEDs
                pinMode(26, OUTPUT);
                  pinMode(27, OUTPUT);
                    digitalWrite(26, LOW);
                      digitalWrite(27, HIGH);

                        // Initialize push button
                          pinMode(32, INPUT_PULLUP);
                          }

                          void loop() {
                            // Check if the button is pressed
                              if (digitalRead(32) == LOW) {
                                  if (!buttonPressed) {
                                        buttonPressed = true;
                                              toggleDoor();
                                                  }
                                                    } else {
                                                        buttonPressed = false;
                                                          }

                                                            // Check if a car is present in the garage
                                                              int distance = sonar.ping_cm();
                                                                if (distance > 0 && distance < 20) {
                                                                    if (!isOpen) {
                                                                          openDoor();
                                                                              }
                                                                                } else {
                                                                                    if (isOpen) {
                                                                                          closeDoor();
                                                                                              }
                                                                                                }

                                                                                                  // Update LED states
                                                                                                    if (isOpen) {
                                                                                                        digitalWrite(26, HIGH);
                                                                                                            digitalWrite(27, LOW);
                                                                                                              } else {
                                                                                                                  digitalWrite(26, LOW);
                                                                                                                      digitalWrite(27, HIGH);
                                                                                                                        }

                                                                                                                          delay(100);
                                                                                                                          }

                                                                                                                          void openDoor() {
                                                                                                                            myServo.write(180); // Open the door
                                                                                                                              isOpen = true;
                                                                                                                              }

                                                                                                                              void closeDoor() {
                                                                                                                                myServo.write(0); // Close the door
                                                                                                                                  isOpen = false;
                                                                                                                                  }

                                                                                                                                  void toggleDoor() {
                                                                                                                                    if (isOpen) {
                                                                                                                                        closeDoor();
                                                                                                                                          } else {
                                                                                                                                              openDoor();
                                                                                                                                                }
                                                                                                                                                }
$abcdeabcde151015202530354045505560fghijfghij
esp:0
esp:2
esp:4
esp:5
esp:12
esp:13
esp:14
esp:15
esp:16
esp:17
esp:18
esp:19
esp:21
esp:22
esp:23
esp:25
esp:26
esp:27
esp:32
esp:33
esp:34
esp:35
esp:3V3
esp:EN
esp:VP
esp:VN
esp:GND.1
esp:D2
esp:D3
esp:CMD
esp:5V
esp:GND.2
esp:TX
esp:RX
esp:GND.3
esp:D1
esp:D0
esp:CLK
servo1:GND
servo1:V+
servo1:PWM
ultrasonic1:VCC
ultrasonic1:TRIG
ultrasonic1:ECHO
ultrasonic1:GND
led1:A
led1:C
led2:A
led2:C
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r