Nodemcu-เลี้ยงไก่-ปลูกผักกินเอง(ตอน2)

ผมก็งงครับ
ยังแก้ปัญหา serial monitor ที่บางครั้งไม่ยอมโชว์ ทั้งที่ ในblynk ยังทำงานได้
หรือ มันแฮงค์ ก็ไม่โชว์เหมือนกัน …
เพราะอะไร ต้องพึ่งการแสดงในblynkด้วย


ตอนนี้ใน blynk เวอร์กแล้ว แต่ serial monitor ว่างเปล่า …

ไปเพลอตั้ง define blynk terminal ทับชื่อ Serial รึป่าวนะ

sketch 15กค.65 node1
เท่าที่เช็คดูไม่ได้ define ทับชื่อซ้ำ
อีกอย่าง น่าจะสาย USB สายเก่าเกี่ยวไหมครับ แต่ก็ upload ได้
หรือ อีกอย่าง node ส่งมา serial ไม่ทัน เพราะ sketch ยาว , ถ้าเฉพาะสั้นๆ จะแสดง serial ได้ปกติ
หรือ sketch ไม่ได้ใหญ่โตอะไร แต่ เขียน sketch ไม่ดี ทำให้ node ส่งมา serial ไม่ทัน
หรือ node จำกลับบ้านเก่า แล้ว 555

//Digital pins 0—15 can be INPUT, OUTPUT, or INPUT_PULLUP
//node1
//D0(motor_rhodes- ไก่โร้ดส์- D0/GPIO16,INPUT_PULLDOWN),D1(reserved),D2(reserved),
//D3(rhodes_tank_sensor"ถังอาหารไก่โร้ดส์"D3 = GPIO 0),D4(upper_tank_sensor ถังบน)D4 = GPIO 2),
//D5((เปิดปิดไฟsensor ถังไก่บ้าน-switch_sensor_local_tank),D6(local_tank_sensor ไก่บ้านD6 = GPIO 12),D7(ac control),
//D8(motor_local)ไก่บ้าน,D9(เปิดปิดไฟsensor ถังบน-switch_sensor_upper_tank),D10(เปิดปิดไฟsensor ถังไก่โร้ดส์-switch_sensor_rhodes_tank)
//A0(analogPin)
//แยกตามswitch_sensor
//D9((24 มิย.เปิดปิดไฟsensor ถังบน-switch_sensor_upper_tank)
//D5(24 มิย.).เปิดปิดไฟsensor ถังไก่บ้าน-switch_sensor_local_tank)
//D10((24 มิย.เปิดปิดไฟsensor ถังไก่โร้ดส์-switch_sensor_rhodes_tank)
//แยกตามsensor
//D4(upper_tank_sensor ถังบน)
//D3(rhodes_tank_sensor"ถังอาหารไก่โร้ดส์"
//D6(local_tank_sensor ไก่บ้าน 
//แยกตามมอเตอร์
//D0(motor_rhodes- ไก่โร้ดส์
//D8(motor_local)ไก่บ้าน
//สารบัญ blynk
//v0(-TANK1),v1(TANK2),v2(TANK3),v3(log close switch sensor local tank),v4(log open switch sensor upper tank),v5(log open switch sensor rhoses tank)
//,v6(log close switch sensor rhoses tank),v7(moterled),v8(button motor local),
//v9(log open switch sensor local tank),v10(log open motorไก่โร้ดส์),v11(log open motorไก่บ้าน),v12(currentDate),v13(เวลา)
//v14(log switch sensor upper tank),v15(เซ็นเซอร์ถังบนทำงานถี่-led),v16(เซ็นเซอร์ถังไก่โร้ดส์ทำงานถี่-led),
//v17(เซ็นเซอร์ถังไก่บ้านทำงานถี่-led),v18(ค่าความถี่ถังบน),v19(ค่าความถี่ถังไก่โร้ดส์),v20(ค่าความถี่ถังไก่บ้าน),v21(log close motorไก่โร้ดส์),
//v22(log close motorไก่บ้าน),v23(button motoer rhodes),v24(vcc_voltage),v25,v26,v27,v28,v29,v30
#include <Wire.h>
//-1·แจ้งทางไลน์
#include <TridentTD_LineNotify.h>
#define LINE_TOKEN  "xxx"   //  ใส่ รหัส TOKEN  ตะลุโบะ- xx
// HIGH คือ หมด LOW คือมี
//0.ดึงเวลาจากเน็ตมาใช้
#include <NTPClient.h>
#include <time.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

//1 ขึ้น Blynk
#include <BlynkSimpleEsp8266.h>
#define BLYNK_PRINT Serial;
WidgetLED TANK1(V0);
WidgetLED TANK2(V1);
WidgetLED TANK3(V2);
WidgetLED motorled(V7);
WidgetLED upper_tank_sensor_val_high_blynkled_v15(V15);
WidgetLED rhodes_tank_sensor_val_high_blynkled_v16(V16);
WidgetLED local_tank_sensor_val_high_blynkled_v17(V17);
WidgetLED motor_rhodes_button_v23(V23);
 String formattedTime;
 String formattedTime2;
 String currentDate;
 int monthDay;
 int currentMonth;
 String string_close;
 String string_open;
WiFiUDP ntpUDP;
const long offsetTime = 25200;       // หน่วยเป็นวินาที จะได้ 7*60*60 = 25200
NTPClient timeClient(ntpUDP, "pool.ntp.org");

//Week Days
String weekDays[7]={"อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัส", "ศุกร์", "เสาร์"};

//Month names
String months[12]={"มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน", "พฤษภาคม", "มิถุนายน", "กรกฎาคม", "สิงหาคม", "กันยายน", "ตุลาคม", "พฤศจิกายน", "ธันวาคม"};


char auth[]="xx";

const char *ssid     = "xx";
const char *password = "xx";
int timezone = 7 * 3600; //ตั้งค่า TimeZone ตามเวลาประเทศไทย
int dst = 0; //กำหนดค่า Date Swing Time
int currentHour = 0;
int currentMinute =0;
// กำหนดค่า offset time เนื่องจากเวลาของเซิฟเวอร์นี้เป็นเวลา UTC เราต้องทำให้เป็นเวลาของประเทศไทย
// เวลาของประเทศไทย = UTC+7 ชั่วโมง ต้องกำหนด offset time = 7 ชั่วโมง

// กำหนด object ของ WiFiUDP ชื่อว่า ntpUDP
//1.ถังอาหารที่1 คือถังอาหารที่เติมอาหารครั้งละ20ลิตร
//   ถ้าอาหารลดลงมากถึงระดับต่ำ1 ให้เตือนทางline
//   ถ้าอาหารลดลงมากถึงระดับต่ำ2 ให้มอเตอร์หยุดทำงาน
//   แต่ต้องเวลากลางวันเท่านั้น ถ้ากลางคืนให้มอเตอร์หยุด
int ac_control = D7;// ควบคุมไฟAC

int motor_rhodes = D0;//หมุนมอเตอร์ไปตามเข็ม ให้ไก่โรดส์
int motor_local = D8;//หมุนมอเตอร์ไปทวนเข็ม ให้ไก่บ้าน
int upper_tank_sensor = D4;
int switch_sensor_upper_tank = D9;
//D9((24 มิย.เปิดปิดไฟsensor ถังบน-switch_sensor_upper_tank)
int switch_sensor_local_tank  =D5;
//D5(24 มิย.).เปิดปิดไฟsensor ถังไก่บ้าน-switch_sensor_local_tank)
int switch_sensor_rhodes_tank =D10;
const int  analogPin = A0; 
//const int sensor =  A0;
float vcc_voltage;
//D10((24 มิย.เปิดปิดไฟsensor ถังไก่โร้ดส์-switch_sensor_rhodes_tank)
//unsigned long upper_tank_sensor_StartTime = millis();
//unsigned long CurrentTime = millis();
//unsigned long upper_tank_sensor_ElapsedTime = CurrentTime - upper_tank_sensor_StartTime;

unsigned long upper_tank_sensor_duration;
unsigned long rhodes_tank_sensor_duration;
unsigned long local_tank_sensor_duration;
//bool local_tank_sensor_state;

int upper_tank_sensor_val = 0;


//int a=0;

//2.ถังอาหารที่2 คือถังที่ให้อาหารไก่ตัวใหญ่จิกกิน
//   ถ้าอาหารลดลงมากถึงระดับต่ำ1 ให้มอเตอร์เริ่มทำงาน
//   แต่ต้องเวลากลางวันเท่านั้น ถ้ากลางคืนให้มอเตอร์หยุด
//   ถ้าอาหารลดลงมากถึงระดับต่ำ2 ให้มอเตอร์หยุดทำงาน

//ถัง2
int rhodes_tank_sensor = D3; //"ถังอาหารไก่โร้ดส์"
int rhodes_tank_sensor_val = 0;
//3.ถังอาหารที่3 คือถังที่ให้อาหารไก่ตัวเล็กจิกกิน
//   ถ้าอาหารลดลงมากถึงระดับต่ำ1 ให้มอเตอร์เริ่มทำงาน
//   แต่ต้องเวลากลางวันเท่านั้น ถ้ากลางคืนให้มอเตอร์หยุด
//   ถ้าอาหารลดลงมากถึงระดับต่ำ2 ให้มอเตอร์หยุดทำงาน

//ถัง3
int local_tank_sensor = D6; 
int local_tank_sensor_val = 0;
        BlynkTimer timer;
//0  ตรวจสอบอุณหภูมิ
 
void setup()
{
         Serial.begin(9600);
     WiFi.mode(WIFI_STA); //เชื่อมต่อ Wifi
     WiFi.begin(ssid, password);
     Serial.println("\nConnecting to WiFi");
     while ((WiFi.status() != WL_CONNECTED)&&(a<6)) {
           Serial.print("*");
           a=a+1;
           delay(100);
      }
// Initialize a NTPClient to get time
  timeClient.begin();
  // Set offset time in seconds to adjust for your timezone, for example:
  // GMT +1 = 3600
  // GMT +7 = 25200
  // GMT -1 = -3600
  // GMT 0 = 0
  timeClient.setTimeOffset(25200);
  //
     configTime(timezone, dst, "pool.ntp.org", "time.nist.gov"); //ดึงเวลาจาก Server
     Serial.println("\nLoading time");
     while (!time(nullptr)) {
           Serial.print("!time(nullptr)");
           
           delay(100);
     }
     Serial.println("");

  Blynk.begin(auth, ssid, password, "oasiskit.com", 8080);  
     //widget ใน blynk
     TANK1.on();
     TANK2.on();
     TANK3.on();
//     DAYNIGHT.on();
     motorled.on();


     //-1·แจ้งทางไลน์
     // กำหนด Line Token
     LINE.setToken(LINE_TOKEN);
     Serial.println();
     Serial.println(LINE.getVersion());
     //0.ดึงเวลาจากเน็ตมาใช้
     Serial.setDebugOutput(true);
     //-1·แจ้งทางไลน์
     //1.ถังอาหารที่1 คือถังอาหารบนที่เติมอาหารครั้งละ20ลิตร
     pinMode(motor_rhodes, OUTPUT);
     pinMode(motor_local, OUTPUT);
     pinMode(upper_tank_sensor, INPUT_PULLUP);
     pinMode(switch_sensor_upper_tank, OUTPUT);
      digitalWrite(switch_sensor_upper_tank, 1);//active low 24 มิย. 65
 
     
     pinMode(switch_sensor_local_tank, OUTPUT);
      digitalWrite(switch_sensor_local_tank, 1);//active low 24 มิย. 65
     pinMode(switch_sensor_rhodes_tank, OUTPUT);
      digitalWrite(switch_sensor_rhodes_tank, 1);//active low 24 มิย. 65
     
     //2.ถังอาหารที่2 คือถังที่ให้อาหารไก่โรดส์กิน
     pinMode(rhodes_tank_sensor, INPUT_PULLUP);// กำหนดขาทำหน้าที่ให้ขา D3 เป็น INPUT รับค่าจากเซ็นเซอิร์cntd "ถังอาหารไก่โร้ดส์: "  
 
      //3.ถังอาหารที่3 คือถังที่ให้อาหารไก่บ้านกิน
     pinMode(local_tank_sensor, INPUT_PULLUP);// กำหนดขาทำหน้าที่ให้ขา D6 เป็น INPUT รับค่าจากเซ็นเซอิร์local_tank_sensor    //แทนpinMode(infrared3, INPUT);

     
     digitalWrite(motor_rhodes, 1);//ปิดมอเตอร์
     Blynk.virtualWrite(V21,string_close);
     digitalWrite(motor_local, 1);//ปิดมอเตอร์
     Blynk.virtualWrite(V22, string_close);
     pinMode(ac_control, OUTPUT); //ควบคุมไฟ AC 
     
     digitalWrite(ac_control, 0);//ปิดไฟ AC
    timer.setInterval(1000L, check_sensortask);//
    timer.setInterval(1000L, check_voltage);//

  Blynk.syncAll();      

}
void check_voltage()
{

  
    //vcc_voltage 
    int b =analogRead(A0);
    Serial.print("analogRead(A0)=");          
    Serial.println(b);          
    Serial.print("vcc_voltage=");  
    vcc_voltage = (4.69/321)*(b);
    Serial.println(vcc_voltage);          
    Blynk.virtualWrite(V24,vcc_voltage);
  
}
void check_sensortask()
  {
  //D4(upper_tank_sensor ถังบนD4 = GPIO 2,upper_tank_sensor_val),D3(rhodes_tank_sensor"ถังอาหารไก่โร้ดส์"D3 = GPIO 0,rhodes_tank_sensor_val),D6(local_tank_sensor ไก่บ้านD6 = GPIO 12,local_tank_sensor_val),
//       digitalWrite(switch_sensor_upper_tank, 0);//active low 24 มิย. 65
  delay(100);
  upper_tank_sensor_duration = pulseIn(upper_tank_sensor, LOW,10000);
  Serial.println(upper_tank_sensor_duration);
//   Blynk.virtualWrite(V18, upper_tank_sensor_duration);
   if(upper_tank_sensor_duration!=0)
     {
     digitalWrite(switch_sensor_upper_tank, 1);//active low 24 มิย. 65
     upper_tank_sensor_val_high_blynkled_v15.on();
     Blynk.virtualWrite(V14, "ค่าความถี่="+String(upper_tank_sensor_duration)+","+string_close);
     }
     else
     {
     upper_tank_sensor_val_high_blynkled_v15.off();
     Blynk.virtualWrite(V4, "ค่าความถี่="+String(upper_tank_sensor_duration)+","+string_open);
     digitalWrite(switch_sensor_upper_tank, 0);//active low 24 มิย. 65
 
      }
  delay(100);
  rhodes_tank_sensor_duration = pulseIn(rhodes_tank_sensor, LOW,10000);
  Serial.println(rhodes_tank_sensor_duration);
   Blynk.virtualWrite(V19, rhodes_tank_sensor_duration);
  if(rhodes_tank_sensor_duration!=0)
    {
     rhodes_tank_sensor_val_high_blynkled_v16.on(); 
     digitalWrite(switch_sensor_rhodes_tank, 1);//active low 24 มิย. 65
     rhodes_tank_sensor_val = 0; //0 คิอ อาหารยังเต็ม , ไฟเซ็นเซอร์สว่าง. แจ้งหลอกให้เต็มก่อนมิฉะนั้นมอเตอร์จะหมุน
     Blynk.setProperty(V1,"color","#2EFE2E");// สีเขียว
     digitalWrite(motor_rhodes, 1);//ปิดมอเตอร์ตามเข็ม , active low
     Blynk.virtualWrite(V6, "ค่าความถี่="+String(upper_tank_sensor_duration)+","+string_close);
     }
     else
     {
     rhodes_tank_sensor_val_high_blynkled_v16.off(); 
     digitalWrite(switch_sensor_rhodes_tank, 0);//active low 24 มิย. 65
     Blynk.virtualWrite(V5, "ค่าความถี่="+String(upper_tank_sensor_duration)+","+string_open);
      }
  delay(100);
  local_tank_sensor_duration = pulseIn(local_tank_sensor, LOW,10000);
  Serial.println(local_tank_sensor_duration);
   Blynk.virtualWrite(V20, local_tank_sensor_duration);
  if(local_tank_sensor_duration!=0 )
    {
     digitalWrite(switch_sensor_local_tank, 1);//active low 24 มิย. 65
     local_tank_sensor_val = 0; //0 คิอ อาหารยังเต็ม , ไฟเซ็นเซอร์สว่าง. แจ้งหลอกให้เต็มก่อนมิฉะนั้นมอเตอร์จะหมุน
     Blynk.setProperty(V2,"color","#2EFE2E");// สีเขียว
     local_tank_sensor_val_high_blynkled_v17.on();
     digitalWrite(motor_local, 1);//ปิดมอเตอร์ทวนเข็ม , active low
      Blynk.virtualWrite(V22, string_close);
     Blynk.virtualWrite(V3, "ค่าความถี่="+String(upper_tank_sensor_duration)+","+string_close);
     }
     else
     {
     local_tank_sensor_val_high_blynkled_v17.off(); 
     digitalWrite(switch_sensor_local_tank, 0);//active low 24 มิย. 65
     Blynk.virtualWrite(V9, "ค่าความถี่="+String(upper_tank_sensor_duration)+","+string_open);
      }
    Blynk.syncAll();            
  }
void loop() {
     ///
     check_time();

     string_close="ปิดเวลา"+String(currentHour)+":"+String(currentMinute)+","+String(monthDay) + "/" + String(currentMonth);
     string_open= "เปิดเวลา"+String(currentHour)+":"+String(currentMinute)+","+String(monthDay) + "/" + String(currentMonth);
     feeding();
    delay(100); 
    Blynk.run();
  Blynk.syncAll();          
     timer.run();
}


BLYNK_WRITE(V23) 
{
if (param.asInt()==1) {
   digitalWrite(ac_control, 0);//เปิดไฟ AC
   digitalWrite(motor_rhodes, 0);//เปิดมอเตอร์ตามเเข็ม , active low
    Blynk.virtualWrite(V10, string_open);
   digitalWrite(motor_local, 1);//ปิดมอเตอร์ทวนเข็ม , active low
     Blynk.virtualWrite(V22, string_close);
   motor_rhodes_button_v23.on();
   Blynk.setProperty(V7,"color","#FF4000");// สีแดง
  }
else
  {
  digitalWrite(ac_control, 1);//ปิดไฟ AC
   motor_rhodes_button_v23.off();
  delay(5000);
     digitalWrite(motor_rhodes, 1);//ปิดมอเตอร์ตามเเข็ม , active low
    Blynk.virtualWrite(V21, string_close);
     
  Blynk.setProperty(V7,"color","#2EFE2E");// สีเขียว
  }
}




BLYNK_WRITE(V8) 
{
if (param.asInt()==1) {
   digitalWrite(ac_control, 0);//เปิดไฟ AC
   digitalWrite(motor_rhodes, 1);//ปิดมอเตอร์ตามเเข็ม , active low
    Blynk.virtualWrite(V21, string_close);
   digitalWrite(motor_local, 0);//เปิดมอเตอร์ทวนเข็ม , active low
    Blynk.virtualWrite(V11, string_open);

   Blynk.setProperty(V7,"color","#FF4000");// สีแดง
  }
else
  {
  digitalWrite(ac_control, 1);//ปิดไฟ AC
  delay(5000);
  digitalWrite(motor_local, 1);//ปิดมอเตอร์ทวนเข็ม , active low
  Blynk.virtualWrite(V22, string_close);
Blynk.setProperty(V7,"color","#2EFE2E");// สีเขียว
  }
}




void feeding()
{
//Serial.println("เป็นเวลากลางวัน");
//Blynk.setProperty(V3,"color","#F8ECE0");// สีครีม
//ให้มอเตอร์ทำงานได้ แต่ต้องเช็คว่าอาหารถัง1 มีไหม และ ในถัง2 หมดแล้วยัง 
//ถ้าครบ2 เงื่อนไข  มอเตอร์ทำงาน
upper_tank_sensor_val = digitalRead(upper_tank_sensor); // ถ้ามีอาหาร =1‚ ถ้าไม่มีอาหาร = 0 ถังอาหารบน
Serial.print("upper_tank_sensor_val: ");
Serial.println(upper_tank_sensor_val);
if (upper_tank_sensor_val == 1) // ถ้ามีอาหาร =0‚ ถ้าไม่มีอาหาร = 1 ถังอาหารบน
   { 
   Serial.print("อาหารถังบนใกล้หมด ");
   Serial.println("ปิดมอเตอร์");
   Blynk.setProperty(V0,"color","#FF4000");// สีแดง
   LINE.notify("อาหารไก่ใกล้หมด");
   digitalWrite(motor_rhodes, 1);//ปิดมอเตอร์ตามเข็ม , active low
   Blynk.virtualWrite(V21, string_close);

   digitalWrite(motor_local, 1);//ปิดมอเตอร์ทวนเข็ม , active low
   Blynk.virtualWrite(V22, string_close);

   digitalWrite(ac_control, 0);//ปิดไฟ AC
   delay(5000);
   } //(upper_tank_sensor_val == 1) // ถ้ามีอาหาร =0‚ ถ้าไม่มีอาหาร = 1 ถังอาหารบน
else //(upper_tank_sensor_val == 1) // ถ้ามีอาหาร =0‚ ถ้าไม่มีอาหาร = 1 ถังอาหารบน
   { //else (upper_tank_sensor_val == 1) // ถ้ามีอาหาร =0‚ ถ้าไม่มีอาหาร = 1 ถังอาหารบน
    //เงื่อนไข2  ถัง2 ถ้า rhodes_tank_sensor_val== 1 คือถังไก่โร้ดส์ใกล้หมด
   Blynk.setProperty(V0,"color","#2EFE2E");// สีเขียว
    rhodes_tank_sensor_val = digitalRead(rhodes_tank_sensor); //"ถังอาหารไก่โร้ดส์"ในการอ่านค่าสวิตช์ที่ต่ออยู่กับ ขาD3 มาเก็บในสตัวแปล rhodes_tank_sensor_val ผ่านD3 ถ้าอาหารถัง2หมด ไฟสว่าง จะต่อวงจร จะทำให้rhodes_tank_sensor_val=0 
    Blynk.setProperty(V1,"color","#2EFE2E");// สีเขียว
    Serial.print("ถังอาหารไก่โร้ดส์: ");
    Serial.println(rhodes_tank_sensor_val);
    if (rhodes_tank_sensor_val == 0) // 0=อาหารไก่โร้ดส์ยังมีอีกคิอ อาหารยังเต็ม , ไฟเซ็นเซอร์สว่าง
       { //(rhodes_tank_sensor_val == 0) // 0=อาหารไก่โร้ดส์ยังมีอีกคิอ อาหารยังเต็ม , ไฟเซ็นเซอร์สว่าง
       Serial.print("อาหารไก่โรดยังมีอีก ");
       Serial.println("ปิดมอเตอร์");
       Blynk.setProperty(V1,"color","#2EFE2E");// สีเขียว
       digitalWrite(motor_rhodes, 1);//ปิดมอเตอร์ตามเข็ม , active low
       Blynk.virtualWrite(V21, string_close);
       digitalWrite(motor_local, 1);//ปิดมอเตอร์ทวนเข็ม , active low
       Blynk.virtualWrite(V22, string_close);
      digitalWrite(ac_control, 0);// ปิดไฟ AC
       delay(5000);
       }//(rhodes_tank_sensor_val == 0)  0=อาหารไก่โร้ดส์ยังมีอีกคิอ อาหารยังเต็ม , ไฟเซ็นเซอร์สว่าง
   else
      { //else (rhodes_tank_sensor_val == 0)  0=อาหารไก่โร้ดส์ยังมีอีกคิอ อาหารยังเต็ม , ไฟเซ็นเซอร์สว่าง
      Serial.print("อาหารถังไก่โรดส์ใกล้หมด ");
      Blynk.setProperty(V1,"color","#FF4000");// สีแดง
      Serial.println("เปิดมอเตอร์");
      digitalWrite(ac_control, 0);// เปิดไฟ AC
      digitalWrite(motor_local, 1);//ปิดมอเตอร์ทวนเข็ม , active low
      Blynk.virtualWrite(V22, string_close);
      digitalWrite(motor_rhodes, 0);//เปิดมอเตอร์ตามเข็ม , active low
      Blynk.virtualWrite(V10, string_open);
      Blynk.setProperty(V7,"color","#FF4000");// สีแดง
      delay(5000);//เปิดมอเตอร์ทวนเข็ม 5 วินาที
      digitalWrite(motor_local, 1);//ปิดมอเตอร์ทวนเข็ม , active low
      Blynk.virtualWrite(V22, string_close);
      Blynk.setProperty(V7,"color","#2EFE2E");// สีเขียว
      delay(5000);//เปิดมอเตอร์ทวนเข็ม 5 วินาที
      }//else (rhodes_tank_sensor_val == 0)  0=อาหารไก่โร้ดส์ยังมีอีกคิอ อาหารยังเต็ม , ไฟเซ็นเซอร์สว่าง
    // เริ่มตรวจถัง 3 โดยใช้ capacitive  proximity sensor ยี่ห้อ CNTD
    local_tank_sensor_val = digitalRead(local_tank_sensor); //ในการอ่านค่าสวิตช์ที่ต่ออยู่กับ ขาD6 มาเก็บในสตัวแปล local_tank_sensor_val ผ่านD6 ถ้าอาหารถังไก่บ้านหมด ไฟสว่าง จะต่อวงจร จะทำให้local_tank_sensor_val=0 
    Serial.print("ถังอาหารไก่บ้าน: ");
    Serial.print("local_tank_sensor_val: ");
    Serial.println(local_tank_sensor_val);
    if (local_tank_sensor_val == 0) //0 คิอ อาหารยังเต็ม , ไฟเซ็นเซอร์สว่าง
       { //(if (local_tank_sensor_val == 0) //0 คิอ อาหารยังเต็ม , ไฟเซ็นเซอร์สว่าง
       Serial.print("อาหารไก่บ้านยังมีอีก ");
       Serial.println("ปิดมอเตอร์");
       Blynk.setProperty(V2,"color","#2EFE2E");// สีเขียว
       digitalWrite(motor_rhodes, 1);//ปิดมอเตอร์ตามเข็ม , active low
       Blynk.virtualWrite(V21, string_close);

       digitalWrite(motor_local, 1);//ปิดมอเตอร์ทวนเข็ม , active low
       Blynk.virtualWrite(V22,string_close);

       digitalWrite(ac_control, 0);// ปิดไฟ AC
       } //if (local_tank_sensor_val == 0) //0 คิอ อาหารยังเต็ม , ไฟเซ็นเซอร์สว่าง
   else //if (local_tank_sensor_val == 0) //0 คิอ อาหารยังเต็ม , ไฟเซ็นเซอร์สว่าง
      {//else if (local_tank_sensor_val == 0) //0 คิอ อาหารยังเต็ม , ไฟเซ็นเซอร์สว่าง
      Serial.print("อาหารถังไก่บ้านใกล้หมด ");
      Blynk.setProperty(V2,"color","#FF4000");// สีแดง
      Serial.print("อาหารถังบนยังมีอีก ");
      digitalWrite(ac_control, 0);// เปิดไฟ AC
      digitalWrite(motor_rhodes, 1);//ปิดมอเตอร์ตามเเข็ม , active low
     Blynk.virtualWrite(V21, string_close);
      digitalWrite(motor_local, 0);//เปิดมอเตอร์ทวนเข็ม , active low
     Blynk.virtualWrite(V11, string_open);
      Blynk.setProperty(V7,"color","#FF4000");// สีแดง
      delay(5000);//เปิดมอเตอร์ทวนเข็ม 5 วินาที
      digitalWrite(motor_local, 1);//ปิดมอเตอร์ทวนเข็ม , active low
     Blynk.virtualWrite(V22, string_close);
      Blynk.setProperty(V7,"color","#2EFE2E");// สีเขียว
      }//else if (local_tank_sensor_val == 0) //0 คิอ อาหารยังเต็ม , ไฟเซ็นเซอร์สว่าง
   } //(upper_tank_sensor_val == 1) // ถ้ามีอาหาร =0‚ ถ้าไม่มีอาหาร = 1 ถังอาหารบน
}

  void check_time()
  {
//     //configTime(timezone, dst, "pool.ntp.org", "time.nist.gov"); //แสดงเวลาปัจจุบัน
//     time_t now = time(nullptr);
//     struct tm* p_tm = localtime(&now);
//1 
  
  timeClient.update();

  time_t epochTime = timeClient.getEpochTime();
  
  formattedTime = timeClient.getFormattedTime();
//  String formattedTime2 = timeClient.getFormattedTime();
  Serial.print("Formatted Time: ");
  Serial.println(formattedTime);  

  currentHour = timeClient.getHours();// int currentHour อยู่ด้านบนแล้ว เพื่อประกาศเป็น global var
  Serial.print("Hour: ");
  Serial.println(currentHour);  
  currentMinute = timeClient.getMinutes();
  Serial.print("Minutes: ");
  Serial.println(currentMinute); 
   
  int currentSecond = timeClient.getSeconds();
  Serial.print("Seconds: ");
  Serial.println(currentSecond);  

  String weekDay = weekDays[timeClient.getDay()];
  Serial.print("Week Day: ");
  Serial.println(weekDay);    

  //Get a time structure
  struct tm *ptm = gmtime ((time_t *)&epochTime); 

  monthDay = ptm->tm_mday;
  Serial.print("Month day: ");
  Serial.println(monthDay);

  currentMonth = ptm->tm_mon+1;
  Serial.print("Month: ");
  Serial.println(currentMonth);

  String currentMonthName = months[currentMonth-1];
  Serial.print("Month name: ");
  Serial.println(currentMonthName);

  int currentYear = ptm->tm_year+1900;
  Serial.print("Year: ");
  Serial.println(currentYear);

  //Print complete date:
  currentDate = String(weekDay) + "-" +String(monthDay) + "-" + String(currentMonth) + "-" + String(currentYear) ;
  Serial.print("Current date: ");
  Serial.println(currentDate);
//1
     Serial.print("current Time=");
     Serial.println(formattedTime);
  Blynk.virtualWrite(V12, currentDate);
    Blynk.virtualWrite(V13, formattedTime);
  Blynk.syncAll();      
  }

กดปุ่มรีเซตดูก็น่าจะรู้แล้วนะ ถ้ากดแล้วมันไม่ขึ้น อะไร อาจจะลองเปลี่ยนสายหรือบอร์ด รันโค้ตเบสิกเบาๆ ดู

ได้ครับ จะลองทำดูครับ

16กค65
เมื่อคืนnode1 หยุดการทำงานเวลา ตี 1.36น. โดยไม่ทราบสาเหตุ
ผมสันนิษฐานว่า น่าจะมีสัตว์บางอย่าง ไปโดน relay module ที่วางใต้ถัง1 ประมาณ6จุด โดยไม่มีกล่องอะไรมาปกคลุม
ที่relay module ถ้ามีการช้อตกันระหว่าง vcc กับ gnd จะมีการรีเซ็ต และถ้าไม่ต่อ wifi ก็จะหยุดการทำงานทันที
ผมก็เลยหาขวดเล็ก มาหุ้ม รีเลย์ทั้งหมดเลย


ปิดช่องว่างตู้ควบคุม



เอา dht11 มาใส่ในที่มิดชิด เพราะถ้าโดนวงจร จะรีเซ็ทเหมือนกัน

1 Likes

ปัญหาหนูกัดสายเป็นไงบ้างครับ ผมว่าสัตว์ที่ว่าก็คงเป็นหนูนี้แหละ 555

ใช่ครับ
ตั้งแต่เมื่อวานถึงวันนี้ ทำงานตลอดแล้วครับ…ไม่มีแฮ้งค์แล้วครับ

ดูกันระยะยาวครับ ติดตามกันต่อไป
Social Media Twitter GIF by 1091