#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>
#include <SevSeg.h>
RTC_DS1307 rtc;
LiquidCrystal_I2C lcd(0x27, 16, 2);
SevSeg sevseg;
// กำหนดขา LDR
const int LDR_PIN = 3; // ขา analog ของ ESP32
void setup() {
Serial.begin(115200);
// เริ่มต้น LCD
lcd.init();
lcd.backlight();
// เริ่มต้น RTC
if (!rtc.begin()) {
lcd.print("RTC not found!");
while (1);
}
if (!rtc.isrunning()) {
lcd.clear();
lcd.print("RTC adjust time");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // ตั้งเวลาอัตโนมัติจากคอมพิวเตอร์
}
// เริ่มต้น 7-segment
byte numDigits = 4;
byte digitPins[] = {13, 12, 14, 27}; // ต่อขา digit
byte segmentPins[] = {26, 25, 33, 32, 15, 4, 2, 5}; // A,B,C,D,E,F,G,DP
bool resistorsOnSegments = true;
byte hardwareConfig = COMMON_CATHODE;
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
sevseg.setBrightness(90);
lcd.clear();
}
void loop() {
// อ่านค่าจาก LDR
int ldrValue = analogRead(LDR_PIN);
float lightPercent = map(ldrValue, 0, 4095, 0, 100);
// อ่านเวลาจาก RTC
DateTime now = rtc.now();
// แสดงค่าบน LCD
lcd.setCursor(0, 0);
lcd.print("Light: ");
lcd.print(lightPercent);
lcd.print("% ");
lcd.setCursor(0, 1);
lcd.print("Time: ");
lcd.print(now.hour());
lcd.print(":");
lcd.print(now.minute());
lcd.print(":");
lcd.print(now.second());
// แสดงเวลาบน 7-segment (เช่น HHMM)
int timeDisplay = (now.hour() * 100) + now.minute();
sevseg.setNumber(timeDisplay, 0);
sevseg.refreshDisplay();
delay(1000);
}