#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
// กำหนดขนาดของ LCD (1602) โดยใช้ I2C address 0x27
LiquidCrystal_I2C lcd(0x27, 16, 2);
RTC_DS1307 rtc;
// ฟังก์ชันแสดงวันของสัปดาห์
String daysOfTheWeek[7] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
void setup() {
// เริ่มต้นการทำงานของ LCD และ RTC
lcd.init();
lcd.backlight();
if (!rtc.begin()) {
lcd.setCursor(0, 0);
lcd.print("Couldn't find RTC");
while (1);
}
if (!rtc.isrunning()) {
// ตั้งเวลาครั้งแรก ถ้าหาก RTC ไม่ได้ทำงาน
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
DateTime now = rtc.now();
// บรรทัดบน: แสดง วันที่ (2 digit), เดือน (2 digit), ปี พ.ศ.
lcd.setCursor(0, 0);
lcd.print(now.day(), DEC);
lcd.print("/");
lcd.print(now.month(), DEC);
lcd.print("/");
lcd.print(now.year() + 543); // ปี พ.ศ.
// บรรทัดล่าง: แสดง ชั่วโมง นาที วินาที (โดยให้ ":" กระพริบ) และวันของสัปดาห์
lcd.setCursor(0, 1);
lcd.print(now.hour() < 10 ? "0" : ""); // ให้แสดงเลข 2 digit
lcd.print(now.hour());
if (millis() % 1000 < 500) {
lcd.print(":"); // กระพริบ ":"
} else {
lcd.print(" ");
}
lcd.print(now.minute() < 10 ? "0" : "");
lcd.print(now.minute());
lcd.print(" ");
lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
delay(500); // หน่วงเวลาเล็กน้อย เพื่อการกระพริบของ ":"
}