#include "RTClib.h"
RTC_DS1307 rtc;
#include "pitches.h"
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
#define SW1 3
#define SW2 9
#define SW3 6
#define SW4 7
#define LED1 5
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
byte offh_set; // Keep hour value
byte offm_set; // Keep Minute Value
byte offs_set; // Keep Minute Value
#define SPEAKER_PIN 4 // buzzer
#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#define TFT_DC 8
#define TFT_CS 2
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
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(SW4, INPUT_PULLUP);
pinMode(LED1, OUTPUT);
pinMode(SPEAKER_PIN, OUTPUT);
Serial.begin(9600);
Serial.println("START");
tft.begin();
tft.fillScreen(ILI9341_WHITE);
tft.setRotation(1);
tft.drawRect(10, 10, 300, 220, ILI9341_BLACK);
tft.drawRoundRect(20, 20, 280, 50, 10, ILI9341_BLACK);
tft.drawRoundRect(20, 190, 280, 30, 10, ILI9341_BLACK);
tft.setCursor(30, 35);
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(2);
tft.println("Current Time: ");
tft.drawLine(40, 90, 280, 90,ILI9341_BLACK);
tft.drawLine(40, 165, 280, 165,ILI9341_BLACK);
tft.drawRoundRect(20, 20, 280, 50, 10, ILI9341_BLACK);
}
void loop() {
DateTime now = rtc.now();
//----เริ่ม timer on --------------------------------------------------------------------------------------
char i[20];
if(digitalRead(SW3) == 0) {
delay(1000);
if(digitalRead(SW3) == 0) {
//*********SPEAKER***********
tone(SPEAKER_PIN, NOTE_E4);
delay(150);
tone(SPEAKER_PIN, NOTE_G4);
delay(150);
tone(SPEAKER_PIN, NOTE_E5);
delay(150);
tone(SPEAKER_PIN, NOTE_C5);
delay(150);
tone(SPEAKER_PIN, NOTE_D5);
delay(150);
tone(SPEAKER_PIN, NOTE_G5);
delay(150);
noTone(SPEAKER_PIN);
//***************************
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");
tft.fillScreen(ILI9341_WHITE);
tft.drawRoundRect(20, 20, 280, 50, 10, ILI9341_BLACK);
tft.setCursor(80, 40);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print("SET TIMER ON");
tft.setCursor(60, 110);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print("Time On : " + String(h_set));
// --- Mode Set Timer H ---
while(st_SetH == 1) {
if(digitalRead(SW1) == 0) {
while(digitalRead(SW1) == 0) delay(1);
tone(SPEAKER_PIN, NOTE_E4);//speaker SW1
delay(150);
noTone(SPEAKER_PIN);
h_set = h_set + 1;
if(h_set > 24) h_set = 24;
Serial.println("HOURS : " + String(h_set));
tft.setCursor(60, 110);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print("Time On : " + String(h_set));
delay(100);
} // Add Time Hour 1 value
if(digitalRead(SW2) == 0) {
while(digitalRead(SW2) == 0) delay(1);
tone(SPEAKER_PIN, NOTE_DS5);//speaker SW2
delay(150);
noTone(SPEAKER_PIN);
h_set = h_set - 1;
if(h_set >= 250) h_set = 0;
Serial.println("HOURS : " + String(h_set));
tft.setCursor(60, 110);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print("Time On : " + String(h_set));
delay(100);
} // minus Time Hour 1 value
if(digitalRead(SW3) == 0) {
delay(500);
if(digitalRead(SW3) == 0) { // Recheck press Switch2
//*********SPEAKER***********
delay(150);
tone(SPEAKER_PIN, NOTE_E4);
delay(150);
tone(SPEAKER_PIN, NOTE_G4);
delay(150);
tone(SPEAKER_PIN, NOTE_E5);
delay(150);
tone(SPEAKER_PIN, NOTE_C5);
delay(150);
tone(SPEAKER_PIN, NOTE_D5);
delay(150);
tone(SPEAKER_PIN, NOTE_G5);
delay(150);
noTone(SPEAKER_PIN);
//***************************
st_SetH = 0; // Set for exit while st_SetH
st_SetM = 1; // For enter while st_SetM
Serial.println("[SET HOURS IS OK]");
tft.setCursor(60, 110);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print("SET HOURS IS OK");
Serial.println(" -> SET MINUTE ");
delay(1000);
tft.setCursor(60, 110);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print(" -> 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);
tone(SPEAKER_PIN, NOTE_E4);//speaker SW1
delay(150);
noTone(SPEAKER_PIN);
m_set = m_set + 2;
if(m_set > 59) m_set = 59;
Serial.println("MINUTE : " + String(m_set));
tft.setCursor(60, 110);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print("SET MINUTE : " + String(m_set) +" ");
delay(100);
} // Add Time Minute 1 value
if(digitalRead(SW2) == 0) {
while(digitalRead(SW2) == 0) delay(1);
tone(SPEAKER_PIN, NOTE_DS5);//speaker SW2
delay(150);
noTone(SPEAKER_PIN);
m_set = m_set - 2;
if(m_set >= 250) m_set = 0;
Serial.println("MINUTE : " + String(m_set));
tft.setCursor(60, 110);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print("SET MINUTE : " + String(m_set) +" ");
delay(100);
} // minus Time Minute 1 value
if(digitalRead(SW3) == 0) {
delay(1000);
if(digitalRead(SW3) == 0) { // Recheck press Switch2
//*********SPEAKER***********
delay(150);
tone(SPEAKER_PIN, NOTE_E4);
delay(150);
tone(SPEAKER_PIN, NOTE_G4);
delay(150);
tone(SPEAKER_PIN, NOTE_E5);
delay(150);
tone(SPEAKER_PIN, NOTE_C5);
delay(150);
tone(SPEAKER_PIN, NOTE_D5);
delay(150);
tone(SPEAKER_PIN, NOTE_G5);
delay(150);
noTone(SPEAKER_PIN);
//***************************
st_SetM = 0; // Set for exit while st_SetM
st_SetS = 1; // For enter while st_SetS
Serial.println("[SET MINUTE IS OK]");
tft.setCursor(60, 110);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print("SET MINUTE IS OK ");
delay(1000);
Serial.println(" -> SET SECOND");
tft.setCursor(60, 110);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print(" -> SET SECOND ");
}
}
//---------------------------
} // exit while loop
// --- Mode Set Timer S ---
while(st_SetS == 1) {
if(digitalRead(SW1) == 0) {
while(digitalRead(SW1) == 0) delay(1);
tone(SPEAKER_PIN, NOTE_E4);//speaker SW1
delay(150);
noTone(SPEAKER_PIN);
s_set = s_set + 3;
if(s_set > 59) s_set = 59;
Serial.println("SECOND : " + String(s_set));
tft.setCursor(60, 110);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print("SET SECOND : " + String(s_set) +" ");
delay(100);
} // Add Time Second 1 value
if(digitalRead(SW2) == 0) {
while(digitalRead(SW2) == 0) delay(1);
tone(SPEAKER_PIN, NOTE_DS5);//speaker SW2
delay(150);
noTone(SPEAKER_PIN);
s_set = s_set - 3;
if(s_set >= 250) s_set = 0;
Serial.println("SECOND : " + String(s_set));
tft.setCursor(60, 110);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print("SET SECOND : " + String(s_set) +" ");
delay(100);
} // Second Time Minute 1 value
if(digitalRead(SW3) == 0) {
delay(1000);
if(digitalRead(SW3) == 0) { // Recheck press Switch2
//*********SPEAKER***********
delay(150);
tone(SPEAKER_PIN, NOTE_E4);
delay(150);
tone(SPEAKER_PIN, NOTE_G4);
delay(150);
tone(SPEAKER_PIN, NOTE_E5);
delay(150);
tone(SPEAKER_PIN, NOTE_C5);
delay(150);
tone(SPEAKER_PIN, NOTE_D5);
delay(150);
tone(SPEAKER_PIN, NOTE_G5);
delay(150);
noTone(SPEAKER_PIN);
//***************************
st_SetS = 0; // For enter while st_SetS
Serial.println("[SET SECOND IS OK]");
tft.setCursor(60, 110);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print("SET SECOND IS OK ");
tft.fillScreen(ILI9341_WHITE);
tft.drawRect(10, 10, 300, 220, ILI9341_BLACK);
tft.drawRoundRect(20, 20, 280, 50, 10, ILI9341_BLACK);
tft.drawRoundRect(20, 190, 280, 30, 10, ILI9341_BLACK);
tft.setCursor(30, 35);
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(2);
tft.println("Current Time: ");
tft.drawLine(40, 90, 280, 90,ILI9341_BLACK);
tft.drawLine(40, 165, 280, 165,ILI9341_BLACK);
tft.drawRoundRect(20, 20, 280, 50, 10, ILI9341_BLACK);
}
}
} // 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");
}//----จบ timer on --------------------------------------------------------------------------------
//----เริ่ม timer off --------------------------------------------------------------------------------
char O[20];
if(digitalRead(SW4) == 0) {
delay(1000);
if(digitalRead(SW4) == 0) {
//*********SPEAKER***********
tone(SPEAKER_PIN, NOTE_E4);
delay(150);
tone(SPEAKER_PIN, NOTE_G4);
delay(150);
tone(SPEAKER_PIN, NOTE_E5);
delay(150);
tone(SPEAKER_PIN, NOTE_C5);
delay(150);
tone(SPEAKER_PIN, NOTE_D5);
delay(150);
tone(SPEAKER_PIN, NOTE_G5);
delay(150);
noTone(SPEAKER_PIN);
//***************************
st_SetH = 1; // Set Variable st_SetH = 1 for enter while loop
Serial.println("--------------------");
Serial.println(" SET TIMER OFF MODE");
Serial.println("--------------------");
Serial.println(" -> SET HOURS");
tft.fillScreen(ILI9341_WHITE);
tft.drawRoundRect(20, 20, 280, 50, 10, ILI9341_BLACK);
tft.setCursor(80, 40);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print("SET TIMER OFF");
tft.setCursor(60, 110);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print("Time OFF : " + String(offh_set));
// --- Mode Set Timer H ---
while(st_SetH == 1) {
if(digitalRead(SW1) == 0) {
while(digitalRead(SW1) == 0) delay(1);
tone(SPEAKER_PIN, NOTE_E4);//speaker SW1
delay(150);
noTone(SPEAKER_PIN);
offh_set = offh_set + 1;
if(offh_set > 24) offh_set = 24;
Serial.println("HOURS : " + String(offh_set));
tft.setCursor(60, 110);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print("Time OFF : " + String(offh_set));
delay(100);
} // Add Time Hour 1 value
if(digitalRead(SW2) == 0) {
while(digitalRead(SW2) == 0) delay(1);
tone(SPEAKER_PIN, NOTE_DS5);//speaker SW2
delay(150);
noTone(SPEAKER_PIN);
offh_set = offh_set - 1;
if(offh_set >= 250) offh_set = 0;
Serial.println("HOURS : " + String(offh_set));
tft.setCursor(60, 110);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print("Time OFF : " + String(offh_set));
delay(100);
} // minus Time Hour 1 value
if(digitalRead(SW4) == 0) {
delay(1000);
if(digitalRead(SW4) == 0) { // Recheck press Switch2
//*********SPEAKER***********
delay(150);
tone(SPEAKER_PIN, NOTE_E4);
delay(150);
tone(SPEAKER_PIN, NOTE_G4);
delay(150);
tone(SPEAKER_PIN, NOTE_E5);
delay(150);
tone(SPEAKER_PIN, NOTE_C5);
delay(150);
tone(SPEAKER_PIN, NOTE_D5);
delay(150);
tone(SPEAKER_PIN, NOTE_G5);
delay(150);
noTone(SPEAKER_PIN);
//***************************
st_SetH = 0; // Set for exit while st_SetH
st_SetM = 1; // For enter while st_SetM
Serial.println("[SET HOURS IS OK]");
tft.setCursor(60, 110);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print("SET HOURS IS OK ");
delay(1000);
Serial.println(" -> SET MINUTE");
tft.setCursor(60, 110);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print(" -> SET MINUTE ");
//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);
tone(SPEAKER_PIN, NOTE_E4);//speaker SW1
delay(150);
noTone(SPEAKER_PIN);
offm_set = offm_set + 2;
if(offm_set > 59) offm_set = 59;
Serial.println("MINUTE : " + String(offm_set));
tft.setCursor(60, 110);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print("Time OFF : " + String(offm_set) +" ");
delay(100);
} // Add Time Minute 1 value
if(digitalRead(SW2) == 0) {
while(digitalRead(SW2) == 0) delay(1);
tone(SPEAKER_PIN, NOTE_DS5);//speaker SW2
delay(150);
noTone(SPEAKER_PIN);
offm_set = offm_set - 2;
if(offm_set >= 250) offm_set = 0;
Serial.println("MINUTE : " + String(offm_set));
tft.setCursor(60, 110);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print("Time OFF : " + String(offm_set)+ " ");
delay(100);
} // minus Time Minute 1 value
if(digitalRead(SW4) == 0) {
delay(1000);
if(digitalRead(SW4) == 0) { // Recheck press Switch2
//*********SPEAKER***********
delay(150);
tone(SPEAKER_PIN, NOTE_E4);
delay(150);
tone(SPEAKER_PIN, NOTE_G4);
delay(150);
tone(SPEAKER_PIN, NOTE_E5);
delay(150);
tone(SPEAKER_PIN, NOTE_C5);
delay(150);
tone(SPEAKER_PIN, NOTE_D5);
delay(150);
tone(SPEAKER_PIN, NOTE_G5);
delay(150);
noTone(SPEAKER_PIN);
//***************************
st_SetM = 0; // Set for exit while st_SetM
st_SetS = 1; // For enter while st_SetS
Serial.println("[SET MINUTE IS OK]");
tft.setCursor(60, 110);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print("SET MINUTE IS OK ");
delay(1000);
Serial.println(" -> SET SECOND");
tft.setCursor(60, 110);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print(" -> SET SECOND ");
//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);
tone(SPEAKER_PIN, NOTE_E4);//speaker SW1
delay(150);
noTone(SPEAKER_PIN);
offs_set = offs_set + 3;
if(offs_set > 59) offs_set = 59;
Serial.println("SECOND : " + String(offs_set));
tft.setCursor(60, 110);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print("Time OFF : " + String(offs_set)+" ");
delay(100);
} // Add Time Second 1 value
if(digitalRead(SW2) == 0) {
while(digitalRead(SW2) == 0) delay(1);
tone(SPEAKER_PIN, NOTE_DS5);//speaker SW2
delay(150);
noTone(SPEAKER_PIN);
offs_set = offs_set - 3;
if(offs_set >= 250) offs_set = 0;
Serial.println("SECOND : " + String(offs_set));
tft.setCursor(60, 110);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print("Time OFF : " + String(offs_set)+" ");
delay(100);
} // Second Time Minute 1 value
if(digitalRead(SW4) == 0) {
delay(1000);
if(digitalRead(SW4) == 0) { // Recheck press Switch2
//*********SPEAKER***********
delay(150);
tone(SPEAKER_PIN, NOTE_E4);
delay(150);
tone(SPEAKER_PIN, NOTE_G4);
delay(150);
tone(SPEAKER_PIN, NOTE_E5);
delay(150);
tone(SPEAKER_PIN, NOTE_C5);
delay(150);
tone(SPEAKER_PIN, NOTE_D5);
delay(150);
tone(SPEAKER_PIN, NOTE_G5);
delay(150);
noTone(SPEAKER_PIN);
//***************************
st_SetS = 0; // For enter while st_SetS
Serial.println("[SET SECOND IS OK]");
tft.setCursor(60, 110);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print("SET SECOND IS OK ");
tft.fillScreen(ILI9341_WHITE);
tft.drawRect(10, 10, 300, 220, ILI9341_BLACK);
tft.drawRoundRect(20, 20, 280, 50, 10, ILI9341_BLACK);
tft.drawRoundRect(20, 190, 280, 30, 10, ILI9341_BLACK);
tft.setCursor(30, 35);
tft.setTextColor(ILI9341_BLACK);
tft.setTextSize(2);
tft.println("Current Time: ");
tft.drawLine(40, 90, 280, 90,ILI9341_BLACK);
tft.drawLine(40, 165, 280, 165,ILI9341_BLACK);
tft.drawRoundRect(20, 20, 280, 50, 10, ILI9341_BLACK);
}
}
} // exit while loop
//---------------------------
} // Recheck Press SW2
} // Press SW2
if(offh_set == now.hour() && offm_set == now.minute() && offs_set == now.second()) {
digitalWrite(LED1, LOW);
Serial.println("LED OFF");
}
//----จบ timer off ------------------------------------------------------------------------------------
//แสดงผลที่ serial monitor
sprintf(i, "Current Time = %02d : %02d : %02d \t",now.hour() ,now.minute(), now.second());
Serial.print(i);
sprintf(i, "Timer ON = %0d . %0d . %0d \t",h_set ,m_set, s_set);
Serial.print(i);
sprintf(O, "Timer OFF = %0d . %0d . %0d",offh_set ,offm_set, offs_set);
Serial.println(O);
delay(1000);
tft.setCursor(35, 200);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print(String(now.day()) + " /" + String(now.month()) + " /" + String(now.year()) + " /" + String(daysOfTheWeek[now.dayOfTheWeek()]) + " ");
tft.setCursor(185, 35);
tft.setTextColor(ILI9341_BLACK,ILI9341_WHITE);
tft.setTextSize(2);
tft.print(String(now.hour()) + "." + String(now.minute()) + "." + String(now.second()) + " ");
tft.setCursor(60, 110);
tft.setTextColor(ILI9341_GREEN,ILI9341_WHITE);
tft.setTextSize(2);
tft.print("Time On : " + String(h_set) + "." + String(m_set) + "." + String(s_set) + " ");
tft.setCursor(60, 140);
tft.setTextColor(ILI9341_RED,ILI9341_WHITE);
tft.setTextSize(2);
tft.print("Time Off : " + String(offh_set) + "." + String(offm_set) + "." + String(offs_set) + " ");
};