#include "RTClib.h"
RTC_DS1307 rtc;
#define SW1 7
#define SW2 10
#define SW3 6
#define LED1 3
bool st_SetH = 0;
bool st_SetM = 0;
bool st_SetS = 0;
byte h_set; // Keep hour value
byte m_set; // Keep Minute Value
byte s_set; // Keep Minute Value
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 for enter while loop
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) { // Recheck press Switch2
st_SetH = 0; // Set for exit while st_SetH
st_SetM = 1; // For enter while st_SetM
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 > 60) 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) { // Recheck press Switch2
st_SetM = 0; // Set for exit while st_SetM
st_SetS = 1; // For enter while st_SetS
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 > 60) s_set = 60;
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 press Switch2
st_SetS = 0; // For enter while st_SetS
Serial.println("[SET SECOND IS OK]");
}
}
} // exit while loop
//---------------------------
} // Recheck Press 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);
delay(1000);
};