แนะนำวิธีแก้ไขปัญหาการหน่วงเวลาการ Swing ของค่าอุณหภูมิและความชื้นเพื่อสั่งให้อุปกรณ์ทำงาน
ชุด Code ตัวอย่าง
ประกาศค่าตัวแปร
//--- ชุดหน่วงเวลาการสวิงของค่า Temp และ Humid
int Count_Temp1_Hi = 0;
int Count_Temp1_Low = 0;
int Count_Humid1_Hi = 0;
int Count_Humid1_Low = 0;
//--- ชุดแจ้งเตือนอุณหถูมิ + Line
int LinerunOnceHi = 0;
int LinerunOnceLow = 0;
int LinerunOnceHi1 = 0;
int LinerunOnceLow1 = 0;
int Temp = 0;
int Humid = 0;
//Task4 : Date/Time Core : 1
void Task4code( void * pvParameters ) {
Serial.print("Task4 running on core ");
Serial.println(xPortGetCoreID());
for (;;) {
//-ถ้า IP เชื่อมต่อเครือข่ายได้ ให้ต่อ NTP SERVE ทำงาน (ทำงาน 1 ครั้ง)-----
IP = WiFi.localIP().toString();
//Serial.print("IP : ");
//Serial.println(IP);
if (Internet == 1 && NTP_connect == 0) {
//Serial.println("เข้า Loop NTP");
configTime(timezone, dst, "1.th.pool.ntp.org", "0.asia.pool.ntp.org", "3.asia.pool.ntp.org"); //แสดงเวลาปัจจุบัน ดึงจากServer
//Serial.println("\nWaiting for time");
while (!time(nullptr)) {
Serial.println("");
delay(1000);
}
NTP_connect = 1;
}
//------สร้างตัวแปร รับค่า ระบบเวลาจาก NTP----------------------------------------------------------------------
time_t now = time(nullptr);
struct tm* p_tm = localtime(&now);
now_time = "";
now_time = now_time + p_tm->tm_hour; // hour
now_time = now_time + ":"; // hour:
now_time = now_time + p_tm->tm_min; // hour:min
now_time = now_time + ":"; // hour:min:
now_time = now_time + p_tm->tm_sec; // hour:min:sec
//Serial.println(now_time); // ส่งข้อความออกทาง Serial Monitor พร้อมขึ้นบรรทัดใหม่
String now_day = "";
now_day = now_day + p_tm->tm_mday; // year-mon-day
now_day = now_day + "/"; // year-mon-
now_day = now_day + (p_tm->tm_mon + 1); // year-mon
now_day = now_day + "/"; // year-
now_day = now_day + (p_tm->tm_year + 1900 + 543); // year
//Serial.println(now_day); // ส่งข้อความออกทาง Serial Monitor พร้อมขึ้นบรรทัดใหม่
dateTime = now_day + " "; // day-mon-year
//---------------------------------------------------------------------------------------------------------
Day = p_tm->tm_mday;
Month = (p_tm->tm_mon + 1);
Year = (p_tm->tm_year + 1900 + 543);
//Serial.println(Year);
THour = p_tm->tm_hour;
Tmin = p_tm->tm_min;
Tsec = p_tm->tm_sec;
Day_name = (p_tm->tm_wday);//จ.=1 อ.=2 พ.=3 พฤ.=4 ศ.=5 ส.=6 อา.=0
//Serial.print("day_of_the_week = ");
//Serial.println(Day_name);
//---------------------------------------------------------------------------------------------------------
//Reset ESP32 ตามเวลาที่ป้อนในหน้า Blynk
if (Internet == 1 and Sel_1_Blynk_Mode == 1) {//ถ้า Internet มา และเลือก Blynk Mode ให้ทำงาน ก็ให้ทำการ Reset ESP32 ตามเงื่อนไข
if (Year >= 2564 and THour == BlynkRst_Hr_int and Tmin == BlynkRst_Min_int and Tsec >= 0 and Tsec <= 3) {
Serial.println("Rebooting after 1 second.");
iotWebConf.delay(1000);
ESP.restart();
}
}
//----------------------------------------------------------------------------------------
//-- แก้ให้ อุปกรณ์หยุดทำงาน ช่วงESP32 Reboot จะรับค่ามาเป็น 0.0
if (Fl_Temp1_of_ESP32bridge != 0.0 or Fl_Humid1_of_ESP32bridge != 0.0) {
//--- ชุดนี้ จะเป็นค่า Temp และ Humid ที่ปกติ
//--- Temp -------------------------
if (Fl_Temp1_of_ESP32bridge >= 28.00 and Fl_Temp1_of_ESP32bridge <= 32.00) {
Blynk.virtualWrite(V22, "ปกติ");
//--- Clear ค่า การส่ง Line (1 ครั้ง) เป็น 0 ใหม่ ถ้า ค่า Temp สวิงกลับมาอยู่ในค่าปกติ
LinerunOnceHi = 0;
LinerunOnceLow = 0;
//--- Clear ค่าการนับเป็น 0 ใหม่ ถ้า ค่า Temp สวิงกลับมาอยู่ในค่าปกติ
Count_Temp1_Low = 0;
Count_Temp1_Hi = 0;
Temp = 0;
}
//--- Humid -------------------------
if (Fl_Humid1_of_ESP32bridge >= 50.00 and Fl_Humid1_of_ESP32bridge <= 70.00) {
Blynk.virtualWrite(V23, "ปกติ");
//--- Clear ค่า การส่ง Line (1 ครั้ง) เป็น 0 ใหม่ ถ้า ค่า Humid สวิงกลับมาอยู่ในค่าปกติ
LinerunOnceHi1 = 0;
LinerunOnceLow1 = 0;
//--- Clear ค่าการนับเป็น 0 ใหม่ ถ้า ค่า Temp สวิงกลับมาอยู่ในค่าปกติ
Count_Humid1_Low = 0;
Count_Humid1_Hi = 0;
Humid = 0;
}
//----------------------------------------------------------------------------------------
if (Count_Temp1_Hi == 15 or Count_Temp1_Low == 15) {//---ถ้า Temp Hi หรือ Lo ให้แปลว่าผิดปกติ
Temp = 1;
}
if (Count_Humid1_Hi == 15 or Count_Humid1_Low == 15) {//---ถ้า Humid Hi หรือ Lo ให้แปลว่าผิดปกติ
Humid = 1;
}
//----------------------------------------------------------------------------------------
//--- ชุดนี้จะเป็นชุดหน่วงเวลาการสวิงของค่า Temp และ Humid + Line + แสดงค่า สถานะใน Blynk
//--- Temp ต่ำ -------------------------
if (Fl_Temp1_of_ESP32bridge < 28.00 and LinerunOnceLow == 0) {
Blynk.virtualWrite(V22, "ต่ำ");
Count_Temp1_Low++;
if (Count_Temp1_Low == 15) {//หน่วง 10 Sec
LINE.setToken(Line_Token_1);
String Tnormal = String (Fl_Temp1_of_ESP32bridge) + " °C : อุณหภูมิต่ำ" ;
LINE.notify(Tnormal);
delay(100);
LinerunOnceLow = 1;
}
}
//--- Temp สูง -------------------------
if (Fl_Temp1_of_ESP32bridge > 32.00 and LinerunOnceHi == 0) {
Blynk.virtualWrite(V22, "สูง");
Count_Temp1_Hi++;
Serial.print("Temp Hi ="); Serial.println(Count_Temp1_Hi);
if (Count_Temp1_Hi == 15) {//หน่วง 10 Sec
LINE.setToken(Line_Token_1);
String Tnormal = String (Fl_Temp1_of_ESP32bridge) + " °C : อุณหภูมิสูง" ;
LINE.notify(Tnormal);
delay(100);
LinerunOnceHi = 1;
}
}
//--- Humid ต่ำ --------------------------
if (Fl_Humid1_of_ESP32bridge < 50.00 and LinerunOnceLow1 == 0) {
Blynk.virtualWrite(V23, "ต่ำ");
Count_Humid1_Low++;
if (Count_Humid1_Low == 15) {//หน่วง 10 Sec
LINE.setToken(Line_Token_1);
String Hnormal = String (Fl_Humid1_of_ESP32bridge) + " % : ความชื้นต่ำ" ;
LINE.notify(Hnormal);
delay(100);
LinerunOnceLow1 = 1;
}
}
//--- Humid สูง -------------------------
if (Fl_Humid1_of_ESP32bridge > 70.00 and LinerunOnceHi == 0) {
Blynk.virtualWrite(V23, "สูง");
Count_Humid1_Hi++;
if (Count_Humid1_Hi == 15) {//หน่วง 10 Sec
LINE.setToken(Line_Token_1);
String Hnormal = String (Fl_Humid1_of_ESP32bridge) + " % : ความชื้นสูง" ;
LINE.notify(Hnormal);
delay(100);
LinerunOnceHi1 = 1;
}
}
//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------
//-- ควบคุมพัดลมระบายอากาศ 4 สถานะ 00 01 10 11-----------------------------
if ( Temp == 0 && Humid == 0 ) { //temp ปกติ humid ปกติ
Device_10_Off();
delay(100);
}
if ( Temp == 0 && Humid == 1 ) {//temp ปกติ humid ผิดปกติ
Device_10_On();
delay(100);
}
if ( Temp == 1 && Humid == 0 ) {//temp ผิดปกติ humid ปกติ
Device_10_On();
delay(100);
}
if ( Temp == 1 && Humid == 1 ) {//temp ผิดปกติ humid ผิดปกติ
Device_10_On();
delay(100);
}
//-----------------------------------------------------------------------
//----------------------------------------------------------------------------------------
}
delay(1000);
}//End loop
}