#include <Wire.h>
#include <SPI.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <Servo.h>
#define PIR_PIN 13
#define LED_GREEN_PIN 12
#define LED_RED_PIN 14
#define SERVO_ON_PIN 27
#define SERVO_OFF_PIN 26
LiquidCrystal_I2C lcd(0x27, 16, 2);
RTC_DS3231 rtc;
Servo servoOn;
Servo servoOff;
void setup() {
Serial.begin(115200);
lcd.begin();
lcd.backlight();
pinMode(PIR_PIN, INPUT);
pinMode(LED_GREEN_PIN, OUTPUT);
pinMode(LED_RED_PIN, OUTPUT);
// Attach servos to pins
servoOn.attach(SERVO_ON_PIN);
servoOff.attach(SERVO_OFF_PIN);
// Initialize RTC
if (!rtc.begin()) {
lcd.print("RTC Error");
while (1);
}
// Show initial welcome message
lcd.print("WELCOME 08:30:00");
lcd.setCursor(0, 1);
lcd.print("OFFICE");
delay(5000);
lcd.clear();
}
void loop() {
if (digitalRead(PIR_PIN) == HIGH) {
openDoor();
}
}
void openDoor() {
lcd.clear();
lcd.print("WELCOME 08:45:00");
lcd.setCursor(0, 1);
lcd.print("OPEN DOOR");
digitalWrite(LED_GREEN_PIN, HIGH);
servoOn.write(90); // เปิดประตู
servoOff.write(0); // ปิด Servo ปิดประตู
delay(5000);
closeDoor();
}
void closeDoor() {
lcd.clear();
lcd.print("WELCOME 08:50:00");
lcd.setCursor(0, 1);
lcd.print("CLOSE DOOR");
digitalWrite(LED_GREEN_PIN, LOW);
digitalWrite(LED_RED_PIN, HIGH);
servoOn.write(0); // ปิด Servo เปิดประตู
servoOff.write(90); // เปิด Servo ปิดประตู
delay(5000);
digitalWrite(LED_RED_PIN, LOW);
lcd.clear();
}