#include "RTClib.h" // นำเข้าไลบารี่ RTC
RTC_DS1307 rtc;
#define SW1 7
#define SW2 10
#define SW3 6
#define LED1 3
bool st_SetH = 0; // ประกาศตัวแปรสำหรับ Hours
bool st_SetM = 0; // ประกาศตัวแแปรสำหรับ Mins
bool st_SetS = 0; // ประกาศตัวแปรสำหรับ Secound
byte h_set;
byte m_set;
byte s_set;
void setup() {
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
pinMode(SW1, INPUT_PULLUP);
pinMode(SW2, INPUT_PULLUP);
pinMode(SW3, INPUT_PULLUP);
pinMode(LED1, OUTPUT);
Serial.begin(9600);
Serial.println("START");
}
void loop() {
DateTime now = rtc.now();
char i[20];
if(digitalRead(SW3) == 0) {
delay(1000);
if(digitalRead(SW3) == 0) {
st_SetH = 1; // Set Variable st_SetH = 1
Serial.println("--------------------");
Serial.println(" SET TIMER MODE");
Serial.println("--------------------");
Serial.println(" -> SET HOURS");
// --------------------------- Mode Set Timer H -------------------------------
while(st_SetH == 1) {
if(digitalRead(SW1) == 0) {
while(digitalRead(SW1) == 0) delay(1);
h_set = h_set + 1;
if(h_set > 24) h_set = 24;
Serial.println("HOURS : " + String(h_set));
delay(100);
}
// -------------------- Add Time Hour 1 value---------------------
if(digitalRead(SW2) == 0) {
while(digitalRead(SW2) == 0) delay(1);
h_set = h_set - 1;
if(h_set >= 250) h_set = 0;
Serial.println("HOURS : " + String(h_set));
delay(100);
}
//----------------------- minus Time Hour 1 value -------------------
if(digitalRead(SW3) == 0) {
delay(1000);
if(digitalRead(SW3) == 0) {
st_SetH = 0;
st_SetM = 1;
Serial.println("[SET HOURS IS OK]");
Serial.println(" -> SET MINUTE");
}
} // exit while loop
} // While Set H
// -------------------------- Mode Set Timer M ----------------------------
while(st_SetM == 1) {
if(digitalRead(SW1) == 0) {
while(digitalRead(SW1) == 0) delay(1);
m_set = m_set + 2;
if(m_set > 59) m_set = 60;
Serial.println("MINUTE : " + String(m_set));
delay(100);
} // Add Time Minute 1 value
if(digitalRead(SW2) == 0) {
while(digitalRead(SW2) == 0) delay(1);
m_set = m_set - 2;
if(m_set >= 250) m_set = 0;
Serial.println("MINUTE : " + String(m_set));
delay(100);
}
// ---------------------- minus Time Minute 1 value -------------------------
if(digitalRead(SW3) == 0) {
delay(1000);
if(digitalRead(SW3) == 0) {
st_SetM = 0;
st_SetS = 1;
Serial.println("[SET MINUTE IS OK]");
Serial.println(" -> SET SECOND");
}
}
} // exit while loop
// ---------------------------- Mode Set Timer S -----------------------------------
while(st_SetS == 1) {
if(digitalRead(SW1) == 0) {
while(digitalRead(SW1) == 0) delay(1);
s_set = s_set + 2;
if(s_set > 59) s_set = 59;
Serial.println("SECOND : " + String(s_set));
delay(100);
} // Add Time Second 1 value
if(digitalRead(SW2) == 0) {
while(digitalRead(SW2) == 0) delay(1);
s_set = s_set - 2;
if(s_set >= 250) s_set = 0;
Serial.println("SECOND : " + String(s_set));
delay(100);
}
// ------------------------ Second Time Minute 1 value------------------------------
if(digitalRead(SW3) == 0) {
delay(1000);
if(digitalRead(SW3) == 0) { // Recheck Switch2
st_SetS = 0;
Serial.println("[SET SECOND IS OK]");
}
}
} // exit while loop
//---------------------------
} // Recheck SW2
} // Press SW2
if(h_set == now.hour() && m_set == now.minute() && s_set == now.second()) {
digitalWrite(LED1, HIGH);
Serial.println("LED ON");
}
else digitalWrite(LED1, LOW);
sprintf(i, "Current Time = %02d . %02d . %02d \t",now.hour() ,now.minute(), now.second());
Serial.print(i);
sprintf(i, "Timer ON = %0d . %0d . %0d",h_set ,m_set, s_set);
Serial.println(i);
sprintf(i, "Timer OFF = %0d : %0d : %0d",h_set ,m_set, s_set);
delay(1000);
};