#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
// ---------------- LCD & RTC ----------------
LiquidCrystal_I2C lcd(0x27, 20, 4);
RTC_DS1307 myRTC;
// ---------------- ตัวแปรเวลา ----------------
DateTime RTC_Now;
byte H_Now, M_Now, S_Now;
byte D_Now, Mo_Now;
int Y_Now;
byte Sec_Old = 99;
// ---------------------- SETUP ----------------------
void setup()
{
Serial.begin(9600);
Wire.begin();
Serial.println("==============================");
Serial.println(" Hello Smart-ENEng. of RMUTI ");
Serial.println("==============================");
lcd.init();
lcd.backlight();
if (!myRTC.begin()) {
Serial.println("RTC NOT FOUND");
while (1);
}
// ตั้งเวลาเฉพาะครั้งแรก
if (!myRTC.isrunning()) {
Serial.println("RTC is NOT running, setting time");
myRTC.adjust(DateTime(2026, 1, 21, 19, 27, 0));
}
// -------- Welcome Screen --------
lcd.clear();
lcd.setCursor(2,1);
lcd.print("Hello Smart-ENEng");
lcd.setCursor(7,2);
lcd.print("RMUTI");
delay(3000);
lcd.clear();
}
// ---------------------- อ่านเวลา RTC ----------------------
void getDateTime(void)
{
RTC_Now = myRTC.now();
H_Now = RTC_Now.hour();
M_Now = RTC_Now.minute();
S_Now = RTC_Now.second();
D_Now = RTC_Now.day();
Mo_Now = RTC_Now.month();
Y_Now = RTC_Now.year();
if (Sec_Old != S_Now)
{
Sec_Old = S_Now;
// -------- LCD บรรทัดที่ 1 --------
lcd.setCursor(0,0);
lcd.print(" Smart ENEng System ");
// -------- LCD บรรทัดที่ 2 --------
lcd.setCursor(0,1);
lcd.print("Date: ");
if (D_Now < 10) lcd.print('0');
lcd.print(D_Now);
lcd.print('/');
if (Mo_Now < 10) lcd.print('0');
lcd.print(Mo_Now);
lcd.print('/');
lcd.print(Y_Now);
// -------- LCD บรรทัดที่ 3 --------
lcd.setCursor(0,2);
lcd.print("Time: ");
if (H_Now < 10) lcd.print('0');
lcd.print(H_Now);
lcd.print(':');
if (M_Now < 10) lcd.print('0');
lcd.print(M_Now);
lcd.print(':');
if (S_Now < 10) lcd.print('0');
lcd.print(S_Now);
// // -------- LCD บรรทัดที่ 4 --------
// lcd.setCursor(0,3);
// lcd.print(" RMUTI Engineering ");
// -------- Serial Monitor --------
Serial.print("Date: ");
if (D_Now < 10) Serial.print('0');
Serial.print(D_Now);
Serial.print('/');
if (Mo_Now < 10) Serial.print('0');
Serial.print(Mo_Now);
Serial.print('/');
Serial.println(Y_Now);
Serial.print("Time: ");
if (H_Now < 10) Serial.print('0');
Serial.print(H_Now);
Serial.print(':');
if (M_Now < 10) Serial.print('0');
Serial.print(M_Now);
Serial.print(':');
if (S_Now < 10) Serial.print('0');
Serial.println(S_Now);
Serial.println("--------------------------");
}
}
// ---------------------- LOOP ----------------------
void loop()
{
getDateTime();
static uint32_t nowtime;
if(millis()>nowtime + 1000){
nowtime = millis();
lcd.setCursor(3,3);
lcd.print("slide : ");
lcd.print(String(analogRead(A0))+" ");
}
}