9-10ตค65
โค้ด Node1 (part1/3)
อยากให้เพื่อนช่วยชี้แนะว่าควรปรับปรุงตรงไหนบ้างครับ
ยังไม่อัพโหลดอีกครับ
ถ้าอัพโหลดแล้ว เจอปัญหาอะไรจะมาเล่าอีกทีครับ
//ขาที่ใช้แล้วได้แก่
//D0(vegetable_valve_D0);D1(fan_D1),D2(),D3(durian_valve_D3,ปล่อยน้ำรดต้นไม้),D4(dht),D5(MUX_A),D6(MUX_B),D7(MUX_C)
//D8(ใช้แล้ว uploadไม่ได้)
//A0(analogPin-ตรวจความชื้นต้นทุเรียน),
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//V0(gauge=temperature),V1(humidity),V2(ค่าความแห้งของดิน-durian_soil_wetness_percent ),V3(start_thisApp_V3),
//V4(currentDate),V5(formattedTime),V6(button auto/manual วาล์วทุเรียน,auto_durian_valve_V6),V7(LED รดน้ำต้นไม้,on=กำลังรดน้ำ-solenoid_durian_led_blynk_v7)
//V8(สวิทช์ปิด-เปิดโซลินอยด์ทุเรียน),V9(terminal-log ปิด-เปิดวาล์ว),V10(button auto/manual วาล์วผัก,auto_vegetable_valve_V10),
//V11(button สวิทช์ปิด-เปิดวาล์วผัก),V12(LED ปิด-เปิดวาล์วผัก ),V13(terminal-log ปิด-เปิดวาล์วผัก),V14(value display-vegetable_soil_wetness_percent)
//V15(LED ปิด-เปิดพัดลม ),V16(แมนวล/ออโต้พัดลม),V17(สวิทช์ปิดเปิดพัดลม),V18(log พัดลม),V19(transformer_status_v19)
//V20(volt_12_transformer_raw),V21(volt_12_transformer_map),//V22(water_spinach1_solenoid_led_blynk_v22)
//V23(autowater_spinach1_valve_V23),V24(manual_water_spinach1_valve_V24),V25(valveผักบุ้ง1=ปิดค่าเท่ากับ10 เปิดค่าเท่ากับ20เพื่อแสดงในsuperchart)
//V26(ค่าเปอร์เซนต์ดินผักบุ้ง1-water_spinach1_soil_wetness_percent).V27(log ผักบุ้งและผักกาด),V28(lettuce1_solenoid_led_blynk_v28)
//V29(auto_lettuce1_valve_V29),V30(manual_lettuce1_valve_V30),V31(valveผักกาด1=ปิดค่าเท่ากับ10 เปิดค่าเท่ากับ20เพื่อแสดงในsuperchart)
//V32(ค่าเปอร์เซนต์ดินผักกาด1-lettuce1_soil_wetness_percent),//V33(water_spinach2_solenoid_led_blynk_V33)//V34(auto_water_spinach2_valve_V34)
//V35(manual_water_spinach2_valve_V35),//V36(valveผักบุ้ง2=ปิดค่าเท่ากับ10 เปิดค่าเท่ากับ20เพื่อแสดงในsuperchart)//V37(ค่าเปอร์เซนต์ดินผักบุ้ง2-water_spinach2_soil_wetness_percent)
//V38();//V39(lettuce2_solenoid_led_blynk_v39)//V40(auto_lettuce2_valve_V40)
//V41(manual_lettuce2_valve_V41),//V42(valveผักกาด2=ปิดค่าเท่ากับ10 เปิดค่าเท่ากับ20เพื่อแสดงในsuperchart)////V43(ค่าเปอร์เซนต์ดินผักกาด2-lettuce2_soil_wetness_percent),
//////////////////////////////////////////////////////////////////////////////////////////////////
//ic4051
// timer.setInterval(1250L, ic4051_task);
#define MUX_A D5
#define MUX_B D6
#define MUX_C D7
/*
ESP8266 4051 Multiplexer by Brian Lough
An example showing how to use a 4051 multiplexer with an esp8266
to connect up to 8 analog sensors.
Wiring:
Wemos -> 4051
---------------
D5 -> S0 (A)
D6 -> S1 (B)
D7 -> S2 (C)
A0 -> Common
3.3v -> VCC
G -> GND
G -> Inhibit
G -> VEE
4051 Option pins are then wired to whatever Analog sensors required
One thing to note: say for example if you only require 2 analog sensors,
You can just wire up S0(A) and connect S1 & S2 to GND and you will be
able to switch between option 1 and option 2 pins.
Same goes for up to 4 pins (just use S0 & S1)
*/
//ทั่วไป
//V4(currentDate),V5(formattedTime),V3(start_thisApp_V3),
//timer.setInterval(2000L,check_time_task);
//wifi
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
const char *ssid = "xxxxx";
const char *password = "xxxxxx";
int a=0;
///////////////////////////////////////////
//Blynk
#include <BlynkSimpleEsp8266.h>
// Auth Token : xxxxxxxx-Blynkเดิม
char auth[]="xxxxxxxxxxxxxxxxxx";//blynkใหม่ eleceasy
BlynkTimer timer;
#define BLYNK_PRINT Serial;
////////////////////////////////////////
//0.ดึงเวลาจากเน็ตมาใช้
#include <NTPClient.h>
#include <time.h>
// String formattedTime;
String currentDate;
int monthDay;
int currentMonth;
// unsigned long epochTime;
WiFiUDP ntpUDP;
const long offsetTime = 25200; // หน่วยเป็นวินาที จะได้ 7*60*60 = 25200
NTPClient timeClient(ntpUDP, "pool.ntp.org");
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 ชั่วโมง
//Week Days
String weekDays[7]={"อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัส", "ศุกร์", "เสาร์"};
//Month names
String months[12]={"มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน", "พฤษภาคม", "มิถุนายน", "กรกฎาคม", "สิงหาคม", "กันยายน", "ตุลาคม", "พฤศจิกายน", "ธันวาคม"};
String currentMonthName;
String string_close;
String string_open;
//const long offsetTime = 25200; // หน่วยเป็นวินาที จะได้ 7*60*60 = 25200
//long currentMillisMove=millis();
unsigned long start_ms_thisApp=0;//ตัวแปรสำหรับนับเวลาที่ได้ทำงานหลังรีสตาร์ตครั้งล่าสุด
int start_thisApp_V3=0;//ตัวแปรสำหรับนับเวลาที่ได้ทำงานหลังรีสตาร์ตครั้งล่าสุด
///////////////////////////////////////////////////
#include <Wire.h>
///////////////////////////////////////////////
//0 ตรวจสอบอุณหภูมิ
//V0(gauge=temperature),V1(humidity)
float maxtemp = -9999; // init with absurdly low value
float mintemp = 9999; // init with absurdly high value
float temperature;
float humidity;
#include <DHT.h>
#define DHTTYPE11 DHT11 // DHT 11
DHT dht(D4, DHTTYPE11);;
///////////////////////////////////////////
//3 ปล่อยน้ำรดต้นทุเรียน
//V2(ค่าความแห้งของดิน-durian_soil_wetness_percent )
//V6(button auto/manual วาล์วทุเรียน,auto_durian_valve_V6)
//V7(LED รดน้ำต้นไม้,on=กำลังรดน้ำ-solenoid_durian_led_blynk_v7)
////V8(สวิทช์ปิด-เปิดโซลินอยด์ทุเรียน),V9(terminal-log ปิด-เปิดวาล์ว)
// timer.setInterval(1000L, durian_task);
int durian_valve_D3 = D3;// ปล่อยน้ำรดต้นทุเรียน
bool durian_valve_D3_state=1;//1=คือปิด active low
int auto_durian_valve_V6=0;
// put your main code here, to run repeatedly:
int durian_soil_dryness;
int durian_soil_wetness_percent=0;
int analogPin = A0; //ประกาศตัวแปร ให้ analogPin แทนขา analog ขาที่5
WidgetLED solenoid_durian_led_blynk_v7(V7);
///////////////////////////////////////////
//4 ปล่อยน้ำรดผัก
//,V10(button auto/manual วาล์วผัก,auto_vegetable_valve_V10),
//V11(button สวิทช์ปิด-เปิดวาล์วผัก),V12(LED ปิด-เปิดวาล์วผัก ),V13(terminal-log ปิด-เปิดวาล์วผัก),
//V14(value display-vegetable_soil_wetness_percent)
// timer.setInterval(1250L, vegetable_task);
int vegetable_soil_wetness = 0;
int vegetable_soil_wetness_percent = 0;
int vegetable_valve_D0 = D0;// ปิดเปิดวาล์วน้ำรดผัก
bool vegetable_valve_D0_state=1;//1=คือปิด active low
WidgetLED solenoid_vegetable_led_blynk_v12(V12);
int auto_vegetable_valve_V10=0;
///////////////////////////////////////
//5.พัดลมลดความร้อน
//V15(LED ปิด-เปิดพัดลม ),V16(แมนวล/ออโต้พัดลม),V17(สวิทช์ปิดเปิดพัดลม),V18(log พัดลม),
//timer.setInterval(1500L,temp_humid_task);
int fan_D1 = D1;
WidgetLED fan_D1_v15(V15);
int auto_fan_V16=1;
bool fan_D1_state=1;//1=คือปิด active low
///////////////////////////////////////
//6. volt_12_transformer_task
//V19(transformer_status_v19)
//V20(volt_12_transformer_raw),V21(volt_12_transformer_map),
//timer.setInterval(4500L,volt_12_transformer_task);
int volt_12_transformer_raw,volt_12_transformer_map,volt_12_transformer_average;
WidgetLED transformer_status_v19(V19);//blynk led หม้อแปลงปกติ เขียว,ผิดปกติ แแดง
//unsigned long last_transformer_read_ms=0;//ตัวแปรสำหรับนับเวลาที่ได้ทำงานตรวจแบตล่าสุด
unsigned long start_5min_interval_transformer_read_ms=0;//ตัวแปรสำหรับนับเวลาที่ได้ทำงานตรวจแบตล่าสุด
////////
//7 ปล่อยน้ำรดผักบุ้ง1
//V22(water_spinach1_solenoid_led_blynk_v22)
//V23(auto_water_spinach1_valve_V23),V24(manual_water_spinach1_valve_V24),
//V25(valveผักบุ้ง1=ปิดค่าเท่ากับ10 เปิดค่าเท่ากับ20เพื่อแสดงในsuperchart)
//V26(ค่าเปอร์เซนต์ดินผักบุ้ง1-water_spinach1_soil_wetness_percent),V27(log ผักบุ้งและผักกาด)
//timer.setInterval(1400L,water_spinach1_task);
//int water_spinach1_valve_on_value_V25=0;
#include <ArduinoJson.h>
//String recv_jsondata;
String order_from_node1;
String info_from_node2;
StaticJsonDocument<256> doc_to_node2;
StaticJsonDocument<256> doc_from_node2;
int water_spinach1_soil_wetness_raw = 0;
int water_spinach1_soil_wetness_percent = 0;
int water_spinach1_valve_state_to_node2;
int water_spinach1_valve_state_from_node2;//0 คือเปิดวาล์ว 1คือปิด active low
int water_spinach1_soil_wetness_state=1;//0 คือดินแห้ง 1คือดินชื้น
WidgetLED water_spinach1_solenoid_led_blynk_v22(V22);
int auto_water_spinach1_valve_V23=0;
/////
//8 lettuce1_task
//V28(lettuce1_solenoid_led_blynk_v28)
//V29(auto_lettuce1_valve_V29),V30(manual_lettuce1_valve_V30),
//V31(valveผักกาด1=ปิดค่าเท่ากับ10 เปิดค่าเท่ากับ20เพื่อแสดงในsuperchart)
//V32(ค่าเปอร์เซนต์ดินผักกาด1-lettuce1_soil_wetness_percent),
//timer.setInterval(1400L,lettuce1_task);
int lettuce1_soil_wetness_raw,lettuce1_soil_wetness_state;
int lettuce1_soil_wetness_percent;
int lettuce1_valve_state_to_node2;
int lettuce1_valve_state_from_node2 ;// ปิดเปิดวาล์วน้ำรดผักกาด1
WidgetLED lettuce1_solenoid_led_blynk_v28(V28);
int auto_lettuce1_valve_V29=0;
////////////////////////////////////////
//9 ปล่อยน้ำรดผักบุ้ง2
//V33(water_spinach2_solenoid_led_blynk_V33)
//V34(auto_water_spinach2_valve_V34)
//V35(manual_water_spinach2_valve_V35)
//V36(valveผักบุ้ง2=ปิดค่าเท่ากับ10 เปิดค่าเท่ากับ20เพื่อแสดงในsuperchart)
//V37(ค่าเปอร์เซนต์ดินผักบุ้ง1-water_spinach2_soil_wetness_percent)
//timer.setInterval(1400L,water_spinach2_task);
int auto_water_spinach2_valve_V34=0;
WidgetLED water_spinach2_solenoid_led_blynk_V33(V33);
int water_spinach2_soil_wetness_raw=0;
int water_spinach2_soil_wetness_percent=0;
int water_spinach2_soil_wetness_state=1;
int water_spinach2_valve_state_to_node2 ;// ปิดเปิดวาล์วน้ำรดผักบุ้ง2
int water_spinach2_valve_state_from_node2 ;// ปิดเปิดวาล์วน้ำรดผักบุ้ง2
////////////////////////////////////////////////
//10 lettuce2
//V39(lettuce2_solenoid_led_blynk_v39)
//V40(auto_lettuce2_valve_V40)
//V41(manual_lettuce2_valve_V41),
//V42(valveผักกาด2=ปิดค่าเท่ากับ10 เปิดค่าเท่ากับ20เพื่อแสดงในsuperchart)
//V43(ค่าเปอร์เซนต์ดินผักกาด2-lettuce2_soil_wetness_percent),
// timer.setInterval(1800L,lettuce2_task)
WidgetLED lettuce2_solenoid_led_blynk_v39(V39);
int auto_lettuce2_valve_V40=0;
int lettuce2_soil_wetness_raw;
int lettuce2_soil_wetness_percent;
int lettuce2_soil_wetness_state;
int lettuce2_valve_state_to_node2;//0 คือเปิดวาล์ว 1คือปิด active low
int lettuce2_valve_state_from_node2;//0 คือเปิดวาล์ว 1คือปิด active low
///////////////////////////////////////////
//Sync blynk
//timer.setInterval(2100L,V6_sync);
// timer.setInterval(2300L,V10_sync);
// timer.setInterval(2200L,V16_sync);
//
void setup() {
Serial.begin(9600);
pinMode(fan_D1, OUTPUT);
digitalWrite(fan_D1, 1);//low active
pinMode(durian_valve_D3, OUTPUT);
digitalWrite(durian_valve_D3, 1);//low active
pinMode(vegetable_valve_D0, OUTPUT);
digitalWrite(vegetable_valve_D0, 1);//low active
Serial.println("ปิดวาล์วน้ำ");
Serial.println();
// put your setup code here, to run once:
dht.begin(); // initialize the DHT sensor
WiFi.mode(WIFI_STA); //เชื่อมต่อ Wifi
WiFi.begin(ssid, password);
delay(500);
Serial.println("\nConnecting to WiFi");
while ((WiFi.status() != WL_CONNECTED)&&(a<10)) {
Serial.print("*");
a=a+1;
delay(500);
}
// Initialize a NTPClient to get time
timeClient.begin();
delay(500);
// 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(500);
}
Serial.println("");
Blynk.begin(auth, ssid, password, "oasiskit.com", 8080);
delay(500);
start_ms_thisApp=millis();//เริ่มจับเวลาระบบเริ่มทำงาน
//0 ตรวจสอบอุณหภูมิ
Serial.println();
Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)");
//2 ความชื้นในดิน
//Deifne output pins for Mux ic4051
pinMode(MUX_A, OUTPUT);
pinMode(MUX_B, OUTPUT);
pinMode(MUX_C, OUTPUT);
//int analogPin = A0; //ประกาศตัวแปร ให้ analogPin แทนขา analog ขาที่5
//3 ปล่อยน้ำรดต้นไม้
Blynk.syncVirtual(V6,V10);//updatenปุ่มออโต้ทุเรียน,ผักตามในมือถือ
transformer_status_v19.on();
//timer.setInterval
timer.setInterval(1250L, ic4051_task);
timer.setInterval(1000L, durian_task);
timer.setInterval(1250L, vegetable_task);
timer.setInterval(1400L,water_spinach1_task);
timer.setInterval(1600L,lettuce1_task);
timer.setInterval(1500L,temp_humid_task);
timer.setInterval(1700L,water_spinach2_task);
timer.setInterval(1800L,lettuce2_task);
timer.setInterval(2000L,check_time_task);
timer.setInterval(2100L,V6_sync);
timer.setInterval(2300L,V10_sync);
timer.setInterval(2200L,V16_sync);
timer.setInterval(4500L,volt_12_transformer_task);
//////////////////////////////////////////////
}
///////
///////
void volt_12_transformer_task()
{//void volt_12_transformer_task()
//ถ้า ภายใน5นาที ครังสุดท้าย battery วัดได้ มากกว่า 9 ถือว่าปกติ น้อยกว่า 9 V transformerมีปัญหา
if ((millis()-start_5min_interval_transformer_read_ms)<300000)
{//if ((millis()-start_5min_interval_transformer_read_ms)<300000)
volt_12_transformer_average=(volt_12_transformer_average+volt_12_transformer_map)/2;
Blynk.virtualWrite(V20,volt_12_transformer_raw);
Blynk.virtualWrite(V21,volt_12_transformer_map);
if (volt_12_transformer_average>=9)
{//if (volt_12_transformer_average>=9)
Blynk.setProperty(V19,"color","#01DF01");//เชียว
}//if (volt_12_transformer_average>=9)
else//if (volt_12_transformer_average>=9)
{//else if (volt_12_transformer_average>=9)
Blynk.setProperty(V19,"color","#D3435C");//สีแดง
}//elseif (volt_12_transformer_average>=9)
}//if ((millis()-start_5min_interval_transformer_read_ms)<300000)
else//if ((millis()-start_5min_interval_transformer_read_ms)<300000)
{//else if ((millis()-start_5min_interval_transformer_read_ms)<300000)
volt_12_transformer_average=volt_12_transformer_map;
start_5min_interval_transformer_read_ms =millis();
}//else if ((millis()-start_5min_interval_transformer_read_ms)<300000)
}//void volt_12_transformer_task()
///////
void V6_sync()
{
Blynk.syncVirtual(V6);
}
///////
///////
void V10_sync()
{
Blynk.syncVirtual(V10);
}
///////
///////
void V16_sync()
{
Blynk.syncVirtual(V16);
}
///////
void ic4051_task()//ปัองกันการกำหนดที่พร้อมกัน ทำให้ analogpin สับสนได้
{
changeMux(LOW, LOW, LOW);//channel 0 -ทุเรียน
delay(2000);
durian_soil_dryness = analogRead(analogPin); //Value of the sensor connected Option 0 pin of Mux
durian_soil_wetness_percent = map( durian_soil_dryness, 1024, 0, 0, 100 );
Serial.print("durian_soil_dryness=");
Serial.println(durian_soil_dryness);
Serial.print("durian_soil_wetness_percent=");
Serial.println(durian_soil_wetness_percent);
delay(2000);
changeMux(LOW, LOW, HIGH);//channel 1-ผัก
delay(2000);
vegetable_soil_wetness = analogRead(analogPin); //Value of the sensor connected Option 1 pin of Mux
vegetable_soil_wetness_percent = map( vegetable_soil_wetness, 0, 1024, 0, 100 );
Serial.print("vegetable_soil_wetness=");
Serial.println(vegetable_soil_wetness);
Serial.print("vegetable_soil_wetness_percent=");
Serial.println(vegetable_soil_wetness_percent);
delay(2000);
////////////////////////////////
changeMux(LOW, HIGH, LOW);//channel 2-วัดไฟ12V
delay(2000);
// last_transformer_read_ms=millis();
volt_12_transformer_raw = analogRead(analogPin); //Value of the sensor connected Option 1 pin of Mux
volt_12_transformer_map = map( volt_12_transformer_raw, 0, 1024, 0, 12 );
delay(2000);
////////////////////////////////
changeMux(LOW, HIGH, HIGH);//channel 3-แปลงผักบุ้ง1
delay(2000);
water_spinach1_soil_wetness_raw = analogRead(analogPin); //Value of the sensor connected Option 1 pin of Mux
water_spinach1_soil_wetness_percent = map( water_spinach1_soil_wetness_raw, 0, 1024, 0, 100 );
delay(2000);
////////////////////////////////
changeMux(HIGH, LOW, LOW);//channel 4-แปลงผักกาด1
delay(2000);
lettuce1_soil_wetness_raw = analogRead(analogPin); //Value of the sensor connected Option 1 pin of Mux
lettuce1_soil_wetness_percent = map(lettuce1_soil_wetness_raw, 0, 1024, 0, 100 );
delay(2000);
////////////////////////////////
changeMux(HIGH, LOW, HIGH);//channel 5-แปลงผักบุ้ง2
delay(2000);
water_spinach2_soil_wetness_raw = analogRead(analogPin); //Value of the sensor connected Option 1 pin of Mux
water_spinach2_soil_wetness_percent = map( water_spinach2_soil_wetness_raw, 0, 1024, 0, 100 );
delay(2000);
////////////////////////////////
changeMux(HIGH, HIGH, LOW);//channel 6-แปลงผักกาด2
delay(2000);
lettuce2_soil_wetness_raw = analogRead(analogPin); //Value of the sensor connected Option 1 pin of Mux
lettuce2_soil_wetness_percent = map(lettuce2_soil_wetness_raw, 0, 1024, 0, 100 );
delay(2000);
}
///////////////////////////
//ic4051
void changeMux(int c, int b, int a) {
digitalWrite(MUX_A, a);
digitalWrite(MUX_B, b);
digitalWrite(MUX_C, c);
}
//////////////////
void durian_task()
{
Blynk.virtualWrite(V2, durian_soil_wetness_percent );
Serial.print(" ความชื้นในดินต้นทุเรียน = "); // พิมพ์ข้อมความส่งเข้าคอมพิวเตอร์ "durian_soil_wetness_percent = "
Serial.println(durian_soil_wetness_percent ); // พิมพ์ค่าของตัวแปร durian_soil_wetness_percent
if (auto_durian_valve_V6==1)
{//if (auto_durian_valve_V6==1)
if (durian_soil_wetness_percent <50) {
Serial.println(" ทุเรียน ดินแห้ง"); // พิมพ์ค่าของตัวแปร durian_soil_wetness_percent
digitalWrite(durian_valve_D3, 0);//active low
Serial.println("เปิดวาล์วน้ำ");
solenoid_durian_led_blynk_v7.on();
Blynk.virtualWrite(V9,string_open);
// Blynk.virtualWrite(V8,"onBackColor");//งงมากๆๆ
// Blynk.setProperty(V8,"onLabel","กำลัง เปิด");
delay(100);
}
else
{
Serial.println(" ทุเรียน ดินชื้น"); // พิมพ์ค่าของตัวแปร durian_soil_wetness_percent
digitalWrite(durian_valve_D3, 1);//active low
solenoid_durian_led_blynk_v7.off();
Blynk.virtualWrite(V9,string_close);
Blynk.virtualWrite(V8,"offBackColor");//งงมากๆๆ
Blynk.setProperty(V8,"offLabel","กำลัง ปิด");
Serial.println("ปิดวาล์วน้ำ");
}
}//if (auto_durian_valve_V6==1)
else//if (auto_durian_valve_V6==1)
{//else if (auto_durian_valve_V6==1)
//แจ้งใน log V9 ตอนนี้ออโต้ไม่ทำงาน
Blynk.virtualWrite(V9,"ตอนนี้เป็นแมนวล เปลี่ยนเป็นออโต้ด้วย");
}//else if (auto_durian_valve_V6==1)
}
//////////////////////////////////////////////
void vegetable_task()
{//void vegetable_task()
Blynk.virtualWrite(V14,vegetable_soil_wetness_percent);
if (auto_vegetable_valve_V10==1)
{//if (auto_vegetable_valve_V10==1)
if (vegetable_soil_wetness_percent <50 )
{
digitalWrite(vegetable_valve_D0, 0);//active low
Blynk.virtualWrite(V13,string_open);
vegetable_valve_D0_state=0;
solenoid_vegetable_led_blynk_v12.on();
Blynk.virtualWrite(V13,string_open);
// Blynk.virtualWrite(V11,"onBackColor");//งงมากๆๆ
// Blynk.setProperty(V11,"onLabel","กำลัง เปิด");
Serial.println(" ผัก ดินแห้ง"); // พิมพ์ค่าของตัวแปร val
}
else
{
Serial.println(" ผัก ดินชื้น"); // พิมพ์ค่าของตัวแปร val
digitalWrite(vegetable_valve_D0, 1);//active low
vegetable_valve_D0_state=1;
Blynk.virtualWrite(V13,string_close);
solenoid_vegetable_led_blynk_v12.off();
Blynk.virtualWrite(V11,"offBackColor");//งงมากๆๆ
Blynk.setProperty(V11,"offLabel","กำลัง ปิด");
}
}//if (auto_vegetable_valve_V10==1)
else//if (auto_vegetable_valve_V10==1)
{//else if (auto_vegetable_valve_V10==1)
//แจ้งใน log V13 ตอนนี้ออโต้ไม่ทำงาน
Blynk.virtualWrite(V13,"ตอนนี้กำลังในโหมดแมนวล,ระบบออโต้ผักไม่ทำงาน");
}//else if (auto_vegetable_valve_V10==1)
}//void vegetable_task()