// ----------- ใช้งาน จอ ILI9341 -----------
#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#include "Humidity.h"
#include "Humidity1.h"
#include "Humidity2.h"
#define TFT_DC 4
#define TFT_CS 2
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
// ----------- ใช้งาน 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 27
#define SW3 32
#define SW4 25
#define BUZ 12
#define Re 14
// -------- ประกาศใช้ตัสแปรตั้งเวลา NO ----------
bool st_SetH = 0;
bool st_SetM = 0;
bool st_SetS = 0;
byte SetH;
byte SetM;
byte SetS;
// -------- ประกาศใช้ตัสแปรตั้งเวลา OFF ----------
bool st_SetH1 = 0;
bool st_SetM1 = 0;
bool st_SetS1 = 0;
byte SetH1;
byte SetM1;
byte SetS1;
/* ******************************************************************** */
void setup() {
pinMode(SW1, INPUT_PULLUP);
pinMode(SW2, INPUT_PULLUP);
pinMode(SW3, INPUT_PULLUP);
pinMode(SW4, INPUT_PULLUP);
pinMode(BUZ, OUTPUT);
pinMode(Re, OUTPUT);
Serial.begin(115200);
Serial.println("Hello, ESP32!");
tft.begin();
tft.setRotation(1);
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
tft.drawRGBBitmap(0, 0, (uint16_t *)dragonBitmap, DRAGON_WIDTH, DRAGON_HEIGHT);
};
/* ******************************************************************** */
void loop() {
DateTime now = rtc.now();
tft.setCursor(100, 20);
tft.setTextColor(ILI9341_WHITE, ILI9341_BLUE);
tft.setTextSize(2);
tft.println(String(now.day(), DEC));
tft.setCursor(190, 20);
tft.println(String(now.month(), DEC));
tft.setCursor(260, 20);
tft.println(String(now.year(), DEC));
tft.setCursor(200, 220);
tft.println(String(now.hour(), DEC) + ":" + String(now.minute(), DEC) + ":" + String(now.second(), DEC) + " ");
tft.setCursor(140, 100);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(String(SetH) + ":" + String(SetM) + ":" + String(SetS) + " ");
tft.setCursor(140, 170);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(String(SetH1) + ":" + String(SetM1) + ":" + String(SetS1) + " ");
Serial.print("Cerrent Time " + String(now.hour(), DEC) + ":" + String(now.minute(), DEC) + ":" + String(now.second(), DEC) + " ");
Serial.print("Timer ON " + String(SetH) + ":" + String(SetM) + ":" + String(SetS) + " ");
Serial.println("Timer OFF " + String(SetH1) + ":" + String(SetM1) + ":" + String(SetS1) + " ");
// ----------- Set timer on ---------
if (digitalRead(SW3) == 0) { // กด SW3 ตั้งเวลา
delay(2000);
if (digitalRead(SW3) == 0) { // กด SW3 ค้างไว้ 2 วิ
tft.drawRGBBitmap(0, 0, (uint16_t *)dragonBitmap1, DRAGON_WIDTH1, DRAGON_HEIGHT1);
st_SetH = 1;
tone(BUZ, 400, 100);
Serial.println("-----------------------------");
Serial.println("- SET TIMER ON -");
Serial.println("-----------------------------");
Serial.println("->SET HOURS");
// ------- ตั้งเวลา Hours (ชม.) --------
while (st_SetH == 1) {
tft.setCursor(220, 80);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetH);
tft.setCursor(220, 140);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetM);
tft.setCursor(220, 200);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetS);
if (digitalRead(SW1) == 0) { // เพิ่มค่า ชม. ครั้งละ 1
tone(BUZ, 400, 50);
while (digitalRead(SW1) == 0) delay(10);
SetH = SetH + 1;
if (SetH >= 24) SetH = 24;
Serial.println("HOURS: " + String(SetH));
tft.setCursor(220, 80);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetH);
tft.setCursor(220, 140);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetM);
tft.setCursor(220, 200);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetS);
delay(50);
}
if (digitalRead(SW2) == 0) { // ลดค่า ชม. ครั้งละ 1
tone(BUZ, 400, 50);
while (digitalRead(SW2) == 0) delay(10);
SetH = SetH - 1;
if (SetH == 255) SetH = 0;
Serial.println("HOURS: " + String(SetH));
tft.setCursor(220, 80);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetH);
tft.setCursor(220, 140);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetM);
tft.setCursor(220, 200);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetS);
delay(50);
}
if (digitalRead(SW3) == 0) { // ยืนยันตั้งค่า ชม.
delay(1000);
if (digitalRead(SW3) == 0) {
tone(BUZ, 400, 100);
st_SetH = 0; // ออกจาก while ชม.
st_SetM = 1; // เข้า while นาที
Serial.println("[SET HOURS IS OK]");
}
}
}
// ----------- Set Minute (นาที) ---------
Serial.println("->SET MINUTE");
while (st_SetM == 1) {
if (digitalRead(SW1) == 0) { // เพิ่มค่า ชม. ครั้งละ 1
tone(BUZ, 400, 50);
while (digitalRead(SW1) == 0) delay(10);
SetM = SetM + 1;
if (SetM >= 60) SetM = 60;
Serial.println("MINUTE: " + String(SetM));
tft.setCursor(220, 80);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetH);
tft.setCursor(220, 140);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetM);
tft.setCursor(220, 200);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetS);
delay(50);
}
if (digitalRead(SW2) == 0) { // ลดค่า ชม. ครั้งละ 1
tone(BUZ, 400, 50);
while (digitalRead(SW2) == 0) delay(10);
SetM = SetM - 1;
if (SetM == 255) SetM = 0;
Serial.println("MINUTE: " + String(SetM));
tft.setCursor(220, 80);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetH);
tft.setCursor(220, 140);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetM);
tft.setCursor(220, 200);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetS);
delay(50);
}
if (digitalRead(SW3) == 0) { // ยืนยันตั้งค่า ชม.
delay(1000);
if (digitalRead(SW3) == 0) {
tone(BUZ, 400, 100);
st_SetM = 0;
st_SetS = 1; // ออกจาก while นาที.
// st_SetM = 1; // เข้า while นาที
Serial.println("SET MINUTE IS OK");
}
}
}
// --------------------------------------
// ----------- Set Second(วินาที) ---------
Serial.println("-> SET SECOUND");
while (st_SetS == 1) {
if (digitalRead(SW1) == 0) { // เพิ่มค่า ชม. ครั้งละ 1
tone(BUZ, 400, 50);
while (digitalRead(SW1) == 0) delay(10);
SetS = SetS + 1;
if (SetS >= 60) SetS = 60;
Serial.println("SECOUND: " + String(SetS));
tft.setCursor(220, 80);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetH);
tft.setCursor(220, 140);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetM);
tft.setCursor(220, 200);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetS);
delay(50);
}
if (digitalRead(SW2) == 0) { // ลดค่า ชม. ครั้งละ 1
tone(BUZ, 400, 50);
while (digitalRead(SW2) == 0) delay(10);
SetS = SetS - 1;
if (SetS == 255) SetS = 0;
Serial.println("SECOUND: " + String(SetS));
tft.setCursor(220, 80);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetH);
tft.setCursor(220, 140);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetM);
tft.setCursor(220, 200);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetS);
delay(50);
}
if (digitalRead(SW3) == 0) { // ยืนยันตั้งค่า ชม.
delay(1000);
if (digitalRead(SW3) == 0) {
tone(BUZ, 400, 100);
tft.drawRGBBitmap(0, 0, (uint16_t *)dragonBitmap, DRAGON_WIDTH, DRAGON_HEIGHT);
st_SetS = 0; // ออกจาก while นาที.
// st_SetS = 1; // เข้า while นาที
Serial.println("SET SECOUND IS OK");
}
}
}
} // if เช็คการกด SW3 ค้าง
} // if กด SW3 2 วิ
delay(100); // this speeds up the simulation
if (now.hour() == SetH && now.minute() == SetM && now.second() == SetS) {
digitalWrite(Re, HIGH);
delay(100);
}
// ----------- Set timer off ---------
if (digitalRead(SW4) == 0) { // กด SW3 ตั้งเวลา
delay(2000);
if (digitalRead(SW4) == 0) { // กด SW3 ค้างไว้ 2 วิ
tft.drawRGBBitmap(0, 0, (uint16_t *)dragonBitmap2, DRAGON_WIDTH2, DRAGON_HEIGHT2);
st_SetH1 = 1;
tone(BUZ, 500, 100);
Serial.println("-----------------------------");
Serial.println("- SET TIMER OFF -");
Serial.println("-----------------------------");
Serial.println("->SET HOURS");
// ------- ตั้งเวลา Hours (ชม.) --------
while (st_SetH1 == 1) {
tft.setCursor(220, 80);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetH1);
tft.setCursor(220, 140);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetM1);
tft.setCursor(220, 200);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetS1);
if (digitalRead(SW1) == 0) { // เพิ่มค่า ชม. ครั้งละ 1
tone(BUZ, 500, 50);
while (digitalRead(SW1) == 0) delay(10);
SetH1 = SetH1 + 1;
if (SetH1 >= 24) SetH1 = 24;
Serial.println("HOURS: " + String(SetH1));
tft.setCursor(220, 80);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetH1);
tft.setCursor(220, 140);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetM1);
tft.setCursor(220, 200);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetS1);
delay(50);
}
if (digitalRead(SW2) == 0) { // ลดค่า ชม. ครั้งละ 1
tone(BUZ, 500, 50);
while (digitalRead(SW2) == 0) delay(10);
SetH1 = SetH1 - 1;
if (SetH1 == 255) SetH1 = 0;
Serial.println("HOURS: " + String(SetH1));
tft.setCursor(220, 80);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetH1);
tft.setCursor(220, 140);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetM1);
tft.setCursor(220, 200);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetS1);
delay(50);
}
if (digitalRead(SW4) == 0) { // ยืนยันตั้งค่า ชม.
delay(1000);
if (digitalRead(SW4) == 0) {
tone(BUZ, 500, 100);
st_SetH1 = 0; // ออกจาก while ชม.
st_SetM1 = 1; // เข้า while นาที
Serial.println("[SET HOURS IS OK]");
}
}
}
// ----------- Set Minute (นาที) ---------
Serial.println("->SET MINUTE");
while (st_SetM1 == 1) {
if (digitalRead(SW1) == 0) { // เพิ่มค่า ชม. ครั้งละ 1
tone(BUZ, 500, 50);
while (digitalRead(SW1) == 0) delay(10);
SetM1 = SetM1 + 1;
if (SetM1 >= 60) SetM1 = 60;
Serial.println("MINUTE: " + String(SetM1));
tft.setCursor(220, 80);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetH1);
tft.setCursor(220, 140);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetM1);
tft.setCursor(220, 200);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetS1);
delay(50);
}
if (digitalRead(SW2) == 0) {
tone(BUZ, 500, 50); // ลดค่า ชม. ครั้งละ 1
while (digitalRead(SW2) == 0) delay(10);
SetM1 = SetM1 - 1;
if (SetM1 == 255) SetM1 = 0;
Serial.println("MINUTE: " + String(SetM1));
tft.setCursor(220, 80);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetH1);
tft.setCursor(220, 140);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetM1);
tft.setCursor(220, 200);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetS1);
delay(50);
}
if (digitalRead(SW4) == 0) { // ยืนยันตั้งค่า ชม.
delay(1000);
if (digitalRead(SW4) == 0) {
tone(BUZ, 500, 100);
st_SetM1 = 0;
st_SetS1 = 1; // ออกจาก while นาที.
// st_SetM = 1; // เข้า while นาที
Serial.println("SET MINUTE IS OK");
}
}
}
// --------------------------------------
// ----------- Set Second(วินาที) ---------
Serial.println("-> SET SECOUND");
while (st_SetS1 == 1) {
if (digitalRead(SW1) == 0) { // เพิ่มค่า ชม. ครั้งละ 1
tone(BUZ, 500, 50);
while (digitalRead(SW1) == 0) delay(10);
SetS1 = SetS1 + 1;
if (SetS1 >= 60) SetS1 = 60;
Serial.println("SECOUND: " + String(SetS1));
tft.setCursor(220, 80);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetH1);
tft.setCursor(220, 140);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetM1);
tft.setCursor(220, 200);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetS1);
delay(50);
}
if (digitalRead(SW2) == 0) { // ลดค่า ชม. ครั้งละ 1
tone(BUZ, 500, 50);
while (digitalRead(SW2) == 0) delay(10);
SetS1 = SetS1 - 1;
if (SetS1 == 255) SetS1 = 0;
Serial.println("SECOUND: " + String(SetS1));
tft.setCursor(220, 80);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetH1);
tft.setCursor(220, 140);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetM1);
tft.setCursor(220, 200);
tft.setTextColor(ILI9341_BLACK, ILI9341_WHITE);
tft.setTextSize(3);
tft.println(SetS1);
delay(50);
}
if (digitalRead(SW4) == 0) { // ยืนยันตั้งค่า ชม.
delay(1000);
if (digitalRead(SW4) == 0) {
tone(BUZ, 500, 100);
tft.drawRGBBitmap(0, 0, (uint16_t *)dragonBitmap, DRAGON_WIDTH, DRAGON_HEIGHT);
st_SetS1 = 0; // ออกจาก while นาที.
// st_SetS = 1; // เข้า while นาที
Serial.println("SET SECOUND IS OK");
}
}
}
} // if เช็คการกด SW3 ค้าง
} // if กด SW3 2 วิ
delay(100); // this speeds up the simulation
if (now.hour() == SetH1 && now.minute() == SetM1 && now.second() == SetS1) {
digitalWrite(Re, LOW);
delay(100);
}
};