// ----------- ใช้งาน DS1307 -----------
#include "RTClib.h"
RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
// ------- ประกาศตัวแปรแทนขา I/O --------
#define SW1 13
#define SW2 12
#define SW3 14
#define BUZ 23
// -------- ประกาศใช้ตัสแปรตั้งเวลา ----------
bool st_SetH=0;
bool st_SetM=0;
bool st_SetS=0;
byte SetH;
byte SetM;
byte SetS;
/* ********************************************************************** */
void setup() {
pinMode(SW1, INPUT_PULLUP);
pinMode(SW2, INPUT_PULLUP);
pinMode(SW3, INPUT_PULLUP);
pinMode(BUZ, OUTPUT);
Serial.begin(115200);
Serial.println("Hello, ESP32!");
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
};
/* ********************************************************************** */
void loop() {
DateTime now = rtc.now();
if(digitalRead(SW3) == 0){ // กด SW3 ตั้งเวลา
delay(2000);
if(digitalRead(SW3) == 0){ // กด SW3 ค้างไว้ 2 วิ
st_SetH = 1;
Serial.println("-----------------------------");
Serial.println("- Set Timer Mode -");
Serial.println("-----------------------------");
Serial.println("Set Hours");
// ------- ตั้งเวลา Hours (ชม.) --------
while(st_SetH == 1){
if(digitalRead(SW1) == 0){ // เพิ่มค่า ชม. ครั้งละ 1
while(digitalRead(SW1)) delay(10);
SetH = SetH + 1;
if(SetH >= 24) SetH = 24;
Serial.println("Hours: " + String(SetH));
delay(50);
}
if(digitalRead(SW2) == 0){ // ลดค่า ชม. ครั้งละ 1
while(digitalRead(SW2)) delay(10);
SetH = SetH - 1;
if(SetH == 255) SetH = 0;
Serial.println("Hours: " + String(SetH));
delay(50);
}
if(digitalRead(SW3) == 0){ // ยืนยันตั้งค่า ชม.
delay(1000);
if(digitalRead(SW3) == 0){
st_SetH = 0; // ออกจาก while ชม.
st_SetM = 1; // เข้า while นาที
Serial.println("Set Hours OK");
}
}
}
// ----------- Set Minute (นาที) ---------
Serial.println("Set Minute");
while(st_SetM == 1){
if(digitalRead(SW1) == 0){ // เพิ่มค่า ชม. ครั้งละ 1
while(digitalRead(SW1)) delay(10);
SetM = SetM + 1;
if(SetM >= 60) SetM = 60;
Serial.println("Minute: " + String(SetM));
delay(50);
}
if(digitalRead(SW2) == 0){ // ลดค่า ชม. ครั้งละ 1
while(digitalRead(SW2)) delay(10);
SetM = SetM - 1;
if(SetM == 255) SetM = 0;
Serial.println("Minute: " + String(SetM));
delay(50);
}
if(digitalRead(SW3) == 0){ // ยืนยันตั้งค่า ชม.
delay(1000);
if(digitalRead(SW3) == 0){
st_SetM = 0; // ออกจาก while นาที.
st_SetS = 1;
// st_SetM = 1; // เข้า while นาที
Serial.println("Set Minute OK");
}
}
}
// --------------------------------------
Serial.println("Set Second");
while(st_SetS == 1){
if(digitalRead(SW1) == 0){ // เพิ่มค่า ชม. ครั้งละ 1
while(digitalRead(SW1)) delay(10);
SetS = SetS + 1;
if(SetS >= 60) SetS = 60;
Serial.println("Second: " + String(SetS));
delay(50);
}
if(digitalRead(SW2) == 0){ // ลดค่า ชม. ครั้งละ 1
while(digitalRead(SW2)) delay(10);
SetS = SetS - 1;
if(SetS == 255) SetS = 0;
Serial.println("Second: " + String(SetS));
delay(50);
}
if(digitalRead(SW3) == 0){ // ยืนยันตั้งค่า ชม.
delay(1000);
if(digitalRead(SW3) == 0){
st_SetS = 0; // ออกจาก while นาที.
// st_SetM = 1; // เข้า while นาที
Serial.println("Set Second OK");
}
}
}
//Serial.println("");
//Serial.println("Set Timer OK");
} // if เช็คการกด SW3 ค้าง
} // if กด SW3 2 วิ
if(now.hour()==SetH && now.minute()==SetM && now.second()==SetS){
tone(23,700,600);
}
Serial.print("Cerrent Timer "+ String(now.hour())+":"+String(now.minute())+":"+String(now.second()));
Serial.println(" Timer on "+ String(SetH)+":"+String(SetM)+":"+String(SetS));
delay(1000);
};