แนะนำ วิธีแก้ไขปัญหาการหน่วงเวลาการ Swing ของค่าอุณหภูมิและความชื้น

แนะนำวิธีแก้ไขปัญหาการหน่วงเวลาการ 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
}