#include <ESP32Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
const int buttonPin = 4;
const int servoPin = 16;
int led_green = 25;
int led_red = 14;
const int buzzerPin = 33;
Servo myServo;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C LCD mungkin berbeda, sesuaikan dengan alamat LCD Anda
RTC_DS3231 rtc;
int buttonState = 0;
int lastButtonState = 0;
int servoPosition = 0;
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
myServo.attach(servoPin);
myServo.write(servoPosition);
lcd.init();
lcd.backlight();
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}if (rtc.lostPower()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == LOW && lastButtonState == HIGH) {
servoPosition = (servoPosition == 0) ? 90 : 0;
myServo.write(servoPosition);
if (servoPosition == 90) {
digitalWrite(led_red, HIGH);
digitalWrite(led_green, LOW)
digitalWrite(buzzerPin, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pintu Tertutup");
} else {
digitalWrite(led_red, LOW);
digitalWrite(led_green, HIGH)
digitalWrite(buzzerPin, LOW);
lcd.clear();
DateTime now = rtc.now();
lcd.setCursor(0, 0);
lcd.print(now.hour(), DEC);
lcd.print(":");
lcd.print(now.minute(), DEC);
lcd.print(":");
lcd.print(now.second(), DEC);
lcd.setCursor(0, 1);
lcd.print("Pintu Terbuka");
}
Serial.println("Button Pressed: Moving Servo");
}
lastButtonState = buttonState;
delay(50);
}