#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // กำหนดที่อยู่ I2C ของ LCD (ตรวจสอบที่อยู่ก่อน)
RTC_DS1307 rtc;
const char* daysOfTheWeek[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
void setup() {
// เริ่มต้นการทำงานของ LCD และ RTC
lcd.init(); // เริ่มต้นใช้งาน LCD (แทน lcd.begin())
lcd.backlight(); // เปิดแสงแบ็คไลท์ของ LCD
if (!rtc.begin()) {
lcd.print("RTC Error");
while (1); // หยุดการทำงานหาก RTC มีปัญหา
}
if (!rtc.isrunning()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // ตั้งค่าเวลาจากเวลาของคอมไพล์
}
}
void loop() {
DateTime now = rtc.now(); // ดึงวันและเวลาปัจจุบันจาก RTC
// แสดง "DATE : DD/MM/YY DAY"
lcd.setCursor(0, 0);
lcd.print("DATE: "); // แสดงข้อความ DATE:
lcd.print(now.day() < 10 ? "0" : ""); // เพิ่มเลข 0 ถ้าเป็นตัวเดียว
lcd.print(now.day());
lcd.print("/");
lcd.print(now.month() < 10 ? "0" : "");
lcd.print(now.month());
lcd.print("/");
lcd.print(now.year() - 2000); // แสดงแค่ 2 หลักท้ายของปี
lcd.print(" ");
lcd.print(daysOfTheWeek[now.dayOfTheWeek()]); // แสดงชื่อย่อของวันในสัปดาห์
// แสดง "TIME : HH:MM" โดยมี : กระพริบ
lcd.setCursor(0, 1);
lcd.print("TIME: "); // แสดงข้อความ TIME:
lcd.print(now.hour() < 10 ? "0" : "");
lcd.print(now.hour());
if (millis() % 1000 < 500) { // ทำให้ : กระพริบ
lcd.print(":");
} else {
lcd.print(" ");
}
lcd.print(now.minute() < 10 ? "0" : "");
lcd.print(now.minute());
delay(500); // หน่วงเวลา 500 ms เพื่อให้ : กระพริบ
}