#define BLYNK_TEMPLATE_ID "TMPL6JwgLDMI7"
#define BLYNK_TEMPLATE_NAME "Drug Reminder"
#define BLYNK_AUTH_TOKEN "pRYgAXPfIGj03OtY9VyibxafAgdVM9YX"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <TimeLib.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
// การเชื่อมต่อ Wi-Fi
char ssid[] = "KOWIT";
char pass[] = "";
// การตั้งค่า pin
#define BUZZER_PIN 14
#define button 13
// ตัวแปรเวลาและสถานะการแจ้งเตือน
int alarmHour1 , alarmMinute1;
int alarmHour2 , alarmMinute2;
int alarmHour3 , alarmMinute3;
int alarmHour4 , alarmMinute4;
int alarmHour5 , alarmMinute5;
int alarmHour6 , alarmMinute6;
int alarmHour7 , alarmMinute7;
int alarmHour8 , alarmMinute8;
int led[8] = {23, 22, 21, 19, 5, 17, 4, 15};
bool alarmTriggered1 = false;
bool alarmTriggered2 = false;
bool alarmTriggered3 = false;
bool alarmTriggered4 = false;
bool alarmTriggered5 = false;
bool alarmTriggered6 = false;
bool alarmTriggered7 = false;
bool alarmTriggered8 = false;
bool isBuzzing = false; // ใช้เพื่อตรวจสอบสถานะของ Buzzer
bool buttonState = false;
// การตั้งค่า NTP
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 7 * 3600); // GMT+7
// ตัวจับเวลา
BlynkTimer timer;
// ฟังก์ชันสำหรับควบคุม Buzzer
void checkAlarm() {
if (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi disconnected. Reconnecting...");
WiFi.begin(ssid, pass);
return;
}
timeClient.update();
int currentHour = timeClient.getHours();
int currentMinute = timeClient.getMinutes();
Serial.printf("Current Time: %02d:%02d\n", currentHour, currentMinute);
// ตรวจสอบเวลาแจ้งเตือนที่ 1
if (currentHour == alarmHour1 && currentMinute == alarmMinute1) {
if (!alarmTriggered1) { // หากยังไม่แจ้งเตือน
Serial.println("Alarm 1 Triggered!");
isBuzzing = true;
tone(BUZZER_PIN, 1000);
digitalWrite(led[0], HIGH);
alarmTriggered1 = true; // ตั้งค่าว่าแจ้งเตือนไปแล้ว
}
} else {
alarmTriggered1 = false; // รีเซ็ตสถานะหากเวลาเปลี่ยนไป
}
// ตรวจสอบเวลาแจ้งเตือนที่ 2
if (currentHour == alarmHour2 && currentMinute == alarmMinute2) {
if (!alarmTriggered2) {
Serial.println("Alarm 2 Triggered!");
isBuzzing = true;
tone(BUZZER_PIN, 1000);
digitalWrite(led[1], HIGH);
alarmTriggered2 = true;
}
} else {
alarmTriggered2 = false;
}
// ตรวจสอบเวลาแจ้งเตือนที่ 3
if (currentHour == alarmHour3 && currentMinute == alarmMinute3) {
if (!alarmTriggered3) {
Serial.println("Alarm 3 Triggered!");
isBuzzing = true;
tone(BUZZER_PIN, 1000);
digitalWrite(led[2], HIGH);
alarmTriggered3 = true;
}
} else {
alarmTriggered3 = false;
}
// ตรวจสอบเวลาแจ้งเตือนที่ 4
if (currentHour == alarmHour4 && currentMinute == alarmMinute4) {
if (!alarmTriggered4) {
Serial.println("Alarm 4 Triggered!");
isBuzzing = true;
tone(BUZZER_PIN, 1000);
digitalWrite(led[3], HIGH);
alarmTriggered4 = true;
}
} else {
alarmTriggered4 = false;
}
// ตรวจสอบเวลาแจ้งเตือนที่ 5
if (currentHour == alarmHour5 && currentMinute == alarmMinute5) {
if (!alarmTriggered5) {
Serial.println("Alarm 5 Triggered!");
isBuzzing = true;
tone(BUZZER_PIN, 1000);
digitalWrite(led[4], HIGH);
alarmTriggered5 = true;
}
} else {
alarmTriggered5 = false;
}
// ตรวจสอบเวลาแจ้งเตือนที่ 6
if (currentHour == alarmHour6 && currentMinute == alarmMinute6) {
if (!alarmTriggered6) {
Serial.println("Alarm 6 Triggered!");
isBuzzing = true;
tone(BUZZER_PIN, 1000);
digitalWrite(led[5], HIGH);
alarmTriggered6 = true;
}
} else {
alarmTriggered6 = false;
}
// ตรวจสอบเวลาแจ้งเตือนที่ 7
if (currentHour == alarmHour7 && currentMinute == alarmMinute7) {
if (!alarmTriggered7) {
Serial.println("Alarm 7 Triggered!");
isBuzzing = true;
tone(BUZZER_PIN, 1000);
digitalWrite(led[6], HIGH);
alarmTriggered7 = true;
}
} else {
alarmTriggered7 = false;
}
// ตรวจสอบเวลาแจ้งเตือนที่ 8
if (currentHour == alarmHour8 && currentMinute == alarmMinute8) {
if (!alarmTriggered8) {
Serial.println("Alarm 8 Triggered!");
isBuzzing = true;
tone(BUZZER_PIN, 1000);
digitalWrite(led[7], HIGH);
alarmTriggered8 = true;
}
} else {
alarmTriggered8 = false;
}
}
// ฟังก์ชันหยุดเสียง Buzzer ผ่าน Blynk
BLYNK_WRITE(V0) {
int stopAlarm = param.asInt();
if (stopAlarm == 1) { // หากกดปุ่มใน Blynk
isBuzzing = false; // ปิดสถานะส่งเสียง
noTone(BUZZER_PIN); // หยุดเสียง Buzzer
Serial.println("Alarm stopped by user!");
Blynk.virtualWrite(V0, 0); // รีเซ็ตปุ่มในแอป Blynk
}
}
//clear led
BLYNK_WRITE(V5) {
int clearLED = param.asInt();
if (clearLED == 1) { // หากกดปุ่มใน Blynk
digitalWrite(led[0], LOW);
digitalWrite(led[1], LOW);
digitalWrite(led[2], LOW);
digitalWrite(led[3], LOW);
digitalWrite(led[4], LOW);
digitalWrite(led[5], LOW);
digitalWrite(led[6], LOW);
digitalWrite(led[7], LOW);
Serial.println("clear LED!");
Blynk.virtualWrite(V5, 0); // รีเซ็ตปุ่มในแอป Blynk
}
}
// ฟังก์ชันตั้งเวลาแจ้งเตือนที่ 1
BLYNK_WRITE(V1) {
TimeInputParam t(param);
if (t.hasStartTime()) {
alarmHour1 = t.getStartHour();
alarmMinute1 = t.getStartMinute();
Serial.printf("Alarm 1 set to: %02d:%02d\n", alarmHour1, alarmMinute1);
}
}
// ฟังก์ชันตั้งเวลาแจ้งเตือนที่ 2
BLYNK_WRITE(V2) {
TimeInputParam t(param);
if (t.hasStartTime()) {
alarmHour2 = t.getStartHour();
alarmMinute2 = t.getStartMinute();
Serial.printf("Alarm 2 set to: %02d:%02d\n", alarmHour2, alarmMinute2);
}
}
// ฟังก์ชันตั้งเวลาแจ้งเตือนที่ 3
BLYNK_WRITE(V3) {
TimeInputParam t(param);
if (t.hasStartTime()) {
alarmHour3 = t.getStartHour();
alarmMinute3 = t.getStartMinute();
Serial.printf("Alarm 3 set to: %02d:%02d\n", alarmHour3, alarmMinute3);
}
}
// ฟังก์ชันตั้งเวลาแจ้งเตือนที่ 4
BLYNK_WRITE(V4) {
TimeInputParam t(param);
if (t.hasStartTime()) {
alarmHour4 = t.getStartHour();
alarmMinute4 = t.getStartMinute();
Serial.printf("Alarm 4 set to: %02d:%02d\n", alarmHour4, alarmMinute4);
}
}
// ฟังก์ชันตั้งเวลาแจ้งเตือนที่ 5
BLYNK_WRITE(V6) {
TimeInputParam t(param);
if (t.hasStartTime()) {
alarmHour5 = t.getStartHour();
alarmMinute5 = t.getStartMinute();
Serial.printf("Alarm 5 set to: %02d:%02d\n", alarmHour5, alarmMinute5);
}
}
// ฟังก์ชันตั้งเวลาแจ้งเตือนที่ 6
BLYNK_WRITE(V7) {
TimeInputParam t(param);
if (t.hasStartTime()) {
alarmHour6 = t.getStartHour();
alarmMinute6 = t.getStartMinute();
Serial.printf("Alarm 6 set to: %02d:%02d\n", alarmHour6, alarmMinute6);
}
}
// ฟังก์ชันตั้งเวลาแจ้งเตือนที่ 7
BLYNK_WRITE(V8) {
TimeInputParam t(param);
if (t.hasStartTime()) {
alarmHour7 = t.getStartHour();
alarmMinute7 = t.getStartMinute();
Serial.printf("Alarm 7 set to: %02d:%02d\n", alarmHour7, alarmMinute7);
}
}
// ฟังก์ชันตั้งเวลาแจ้งเตือนที่ 8
BLYNK_WRITE(V9) {
TimeInputParam t(param);
if (t.hasStartTime()) {
alarmHour8 = t.getStartHour();
alarmMinute8 = t.getStartMinute();
Serial.printf("Alarm 8 set to: %02d:%02d\n", alarmHour8, alarmMinute8);
}
}
void setup() {
Serial.begin(115200);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(led[0], OUTPUT);
pinMode(led[1], OUTPUT);
pinMode(led[2], OUTPUT);
pinMode(led[3], OUTPUT);
pinMode(led[4], OUTPUT);
pinMode(led[5], OUTPUT);
pinMode(led[6], OUTPUT);
pinMode(led[7], OUTPUT);
pinMode(button, INPUT_PULLUP);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
timeClient.begin();
timer.setInterval(1000L, checkAlarm); // ตรวจสอบทุกวินาที
}
void loop() {
buttonState = digitalRead(button);
if (buttonState == 0) { // หากกดปุ่มใน Blynk
isBuzzing = false; // ปิดสถานะส่งเสียง
noTone(BUZZER_PIN); // หยุดเสียง Buzzer
Serial.println("Alarm stopped by user!");
Blynk.virtualWrite(V0, 0); // รีเซ็ตปุ่มในแอป Blynk
}
Blynk.run();
timer.run();
}