โค้ดล่าสุดครับ สำหรับ node2(esp8266)
โค้ดยาวมาก 1500 บรรทัด
ส่วนที่ 1 (บรรทัด1-700)
//V0(ความชื้นฟักไข่-stepH),V1เวลาเปิดไฟไก่เล็ก-stepH),V2(ค่าความแห้งของดิน),V3(ความแห้งของดิน-booline),
//V4(หมุนรางไข่MoveLed_V4),V5(เปิดพัดลมระบายอากาศ-ฟักไข่VenLed_V5),V6(พัดลมลดความเย็น ฟักไข่ CoolingLed_hatching_V6),V7(เพิ่มความร้อน ฟักไข่ HeatingLed_V7),
//V8(ฟักไข่Humid_hatching_Led_V8),V9(step H ตั้งอุณหภูมิเครื่องฟักไข่),V10(lamp_chick_led),V11(periodMinmorning_watering_V11),
//V12(currentDate),V13(formattedTime),V14(สวิทช์หลอดไฟไก่เล็ก่),
//V15(stepH รดน้ำตอนเย็น),V16(not_within_min_V16),V17(start_am),V18(end_am),V19(start_pm),
//V20(end_pm),V21(solenoid_vegetable_led_blynk_v21),V22(solenoid_vegetable_button_blynk_v22),
//V23(min soil moisture),V24(max soil moisture),V25(stepHกำหนดความแห้งของดิน)
//V26(Day_hatch_hatching_V26),V27(move_ON_hatching-stepH),V28(temperature_hatching-gauge)
//V29(humidity_hatching-gauge),V30(ปุ่มเลือก พลิกไข่แบบ ออโต้/แมนวล),V31(ปุ่มพลิกไข่แบบแมนวล),
//V32(log เปิดรดน้ำฝัก),V33(log ปิดรดน้ำฝัก),V34(move_OFF_hatching-stepH),V35(terminal -เวลาที่เหลือหลอดไฟลูกไก่)
//V36(terminal -เวลาที่เหลือหลอดปั๋มน้ำให้เล้าเย็น),V37(logหยุดพลิกไข่),V38(logทำการพลิกไข่),V39(ปุ่มเลือก โซลินอยด์ผักแบบ ออโต้/แมนวล)
//V40(terminal -เวลาที่เหลือจะปิด/เปิดรดน้ำ),v41(พัดลม-ven_fan_for_breathing_ON-stepH),v42(พัดลม-ven_fan_for_breathing_OFF_V42-stepH)
//V43(เลือกแบบแมนวลหรือออโต้ พัดลม),V44(สวิทช์เปิดปิดพัดลมแบบแมนวล),V45(log เหลือเวลาที่จะเปิดพัดลม),V46(log เวลาหยุดพัดลม),V47(log เวลาเปิดพัดลม)
//V48(day1_hatching_V48วันแรกที่ฟักไข่-value display),V49(date time ผลจากV54value display )
//V50(เช็ควันที่ในeeprom),V51(epoch timeในeeprom),V52(date,timeจากV51),V53(เพิ่มลดเวลา1ชั่วโมงของV49),V54(กำหนดวันแรกที่ฟักไข่ แบบ epoch time stepH step ละ86400000ms หรือ 24ขั่วโมง)
//V55(epoch time ของเวลาปัจจุบัน),(V56)//ปุ่มอนุญาติเขียนลงในeeprom1,(V57)////ปุ่มอนุญาติเขียนลงในeeprom2,V58(log การเขียนใน eeprom-terminal)
//ทั่วไป
#include <DHT.h>
float maxtemp = -9999; // init with absurdly low value
float mintemp = 9999; // init with absurdly high value
#include <Wire.h>
//0.ดึงเวลาจากเน็ตมาใช้
#include <NTPClient.h>
#include <time.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
//1 ขึ้น Blynk
#include <BlynkSimpleEsp8266.h>
#define BLYNK_PRINT Serial;
String formattedTime;
String currentDate;
int monthDay;
int currentMonth;
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]={"มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน", "พฤษภาคม", "มิถุนายน", "กรกฎาคม", "สิงหาคม", "กันยายน", "ตุลาคม", "พฤศจิกายน", "ธันวาคม"};
char auth[]="xxxxx";//หัวข้ออีเมล์ blynk token ไก่-ผัก
const char *ssid = "xxxxx";
const char *password = "xxxxx";
int a=0;
String string_close;
String string_open;
//const long offsetTime = 25200; // หน่วยเป็นวินาที จะได้ 7*60*60 = 25200
//long currentMillisMove=millis();
BlynkTimer timer;
//-ทั่วไป
///ฟักไข่ ทั่วไป
//2022/08/28 05:01=hatching_day1 = 1661637660000
//1วัน = 86400000
unsigned long hatching_day1 = 1661637660000;
const unsigned long may_23_2022 = 1653311980856;//23 พค. 65
#include <EEPROM.h>
//ฟักไข่
#define dht_hatching_D6 D6 // Digital pin connected to the DHT sensor
#define DHTTYPE11 DHT11 // DHT 11
DHT dht_hatching(dht_hatching_D6, DHTTYPE11);;
float temperature_hatching;
float humidity_hatching;
//D1(dht)
int TempSet_hatching_V9 = 37;
int HumidSet_hatching_V0 = 70;
int Day_hatch_hatching_V26 ;
String ttt;
int Length_String;
unsigned long epoch1,epoch2,epoch3,epoch4,epoch5;//epoch1เก็บตัวแปรจากV54เพื่อใช้ในV53,epoch2ที่เก็บในeepromใช้ในV51,V52,epoch3ใช้ในV56,epoch4เป็นเวลาปัจจุบัน ใช้ใน V55,epoch5เป็นเวลาสำหรับการเขียนลงในeeprom V48,
int back_num1,back_num2,back_num3,back_num4,back_num5,back_num6,back_num7,back_num8,back_num9,back_num10;
int num1,num2,num3,num4,num5,num6,num7,num8,num9,num10;
bool write_eeprom_permission_V56_state=0;
//-ฟักไข่ ทั่วไป
//พลิกไข่
int move_motor_hatching_D1 = D1;//มอเตอร์พลิกไข่
int move_ON_hatching_seconds_V27=2 ; //milliseconds 2นาที= 60*2*1000 = 120000
int move_OFF_hatching_min_V34=58 ; //milliseconds 58นาที= 60*58*1000 = 3480000
unsigned long move_hatching_ms; //time from millis()
unsigned long startMillisMove=0;
unsigned long move_hatching_msLast; //last time the LED changed state
boolean move_motor_hatching_D1_state=0;
boolean hatching_move_auto_manual_v30_State;;
WidgetLED MoveLed_hatching_V4(V4);
//-พลิกไข่
//พัดลมระบายอากาศ ให้ควบพร้อมกับ การพลิกไข่ ทุก 1ชั่วโมง
int ven_fan_hatching_D3 = D3;//พัดลมระบายอากาศ
int ven_fan_for_breathing_second_ON_V41 = 10; //milliseconds
int ven_fan_for_breathing_min_OFF_V42= 30;//ven_fan_hatching_OFF
unsigned long startMillisven_fan_for_breathing=0;
unsigned long ven_fan_for_breathing_msLast; //last time the LED changed state
boolean ven_fan_for_breathing_State; //current LED state
boolean ven_fan_hatching_D3_state=1;
boolean ven_fan_hatching_auto_manual_v43_State;
WidgetLED VenLed_hatching_V5(V5);
WidgetLED CoolingLed_hatching_V6(V6);
//lamp hatching
int heater_lamp_hatching_D2 = D2;//หัลอดไฟฮีตเตอร์
WidgetLED HeatingLed_hatching_V7(V7);//เดิม v8
//WidgetLED HeatingLed(V8);
//-lamp hatching
//พ่นหมอก
int humidifier_hatching_D5 = D5;// พ่นหมอก
WidgetLED Humid_hatching_Led_V8(V8);
//WidgetLED HumidLed(V10);
//-พ่นหมอก
///lamp_chicken
int lamp_chick = D4;// 24มิย65
bool lamp_chicken_blynkV14=0;//1คือ เปิด 0คือปิด
WidgetLED lamp_chick_button_V14(V14);
WidgetLED lamp_chick_led_v10(V10);
int open_chicken_lamp_period=2;//2hrs
unsigned long start_chicken_lamp=millis();
///-lamp_chicken
//ผัก
float min_soil_moisture = 9999; // init with absurdly high value
float max_soil_moisture =-9999; // init with absurdly low value
unsigned long start_millis_soil_check;
int vegetable_soil_dryness = 0;
float vegetable_soil_dryness_blynk_V25=910;
int soil_dryness_analog_A0 = A0;
bool soil_dryness_state = 0;//ดินเปียกlow active module 0คือแห้ง 1คือเปียก
unsigned long startMillismorning_watering=0;
unsigned long lastMillismorning_watering;
int periodMinmorning_watering_V11=3;//min
unsigned long startMillisevening_watering=0;
unsigned long lastMillisevening_watering;
int periodMinevening_watering_V15=3; //min
int not_within_min_V16=3; //min
int start_am=6; //oclock
int end_am=7; //oclock
int start_pm=16; //oclock
int end_pm=18; //oclock
int solenoid_vegetable_D7=D7;
WidgetLED solenoid_vegetable_led_blynk_v21(V21);
WidgetLED solenoid_vegetable_button_blynk_v22(V22);
bool solenoid_vegetable_auto_manual_V39_state=1;
bool solenoid_vegetable_D7_state=1;//active low,1=stop
//-ผัก
BLYNK_WRITE(V0)
{
int pinValue = param.asInt(); // assigning incoming value from pin V6 to a variable
// You can also use:
// String i = param.asStr();
// double d = param.asDouble();
Serial.print("ความชื้นของการฟักไข่: ");
Serial.println(pinValue);
HumidSet_hatching_V0 = pinValue;
}
BLYNK_WRITE(V1)
{
delay(500);
open_chicken_lamp_period = param.asInt(); // assigning incoming value from pin V1 to a variable
delay(500);
Serial.print("open_chicken_lamp_period: ");
Serial.print(open_chicken_lamp_period);
Serial.println("นาที");
// periodMinevening_watering_V15 = open_hen_lamp_period;
}
BLYNK_WRITE(V9)//ตั้งอุณหภูมิเครื่องฟักไข่
{
int pinValue = param.asInt(); // assigning incoming value from pin V6 to a variable
// You can also use:
// String i = param.asStr();
// double d = param.asDouble();
Serial.print("อุณหภูมิฟักไข่: ");
Serial.println(pinValue);
TempSet_hatching_V9 = pinValue;
}
BLYNK_WRITE(V11)
{
delay(500);
int pinValue = param.asInt(); // assigning incoming value from pin V1 to a variable
delay(500);
// You can also use:
// String i = param.asStr();
// double d = param.asDouble();
Serial.print("รดน้ำตอนเช้า: ");
Serial.print(pinValue);
Serial.println("นาที");
periodMinmorning_watering_V11 = pinValue;
}
BLYNK_WRITE(V14) //หลอดไฟไก่เล็ก
{
delay(500);
if (param.asInt()==1)
{
if (lamp_chicken_blynkV14=0)
{
start_chicken_lamp=millis() ;
}
if ((millis()-start_chicken_lamp) <(open_chicken_lamp_period*60*1000)) //900000=15min//60000=1min
{
digitalWrite(lamp_chick, 0);//เปิด active low}
lamp_chick_led_v10.on();
if ((millis()-start_chicken_lamp) <(open_chicken_lamp_period*60*1000)) //900000=15min//60000=1min
{
Blynk.virtualWrite(V35,"*****เหลือเวลาอีก=");
Blynk.virtualWrite(V35,String((start_chicken_lamp +(open_chicken_lamp_period*60*1000)-millis())/(1000) )+"วินาที---------------");
}
lamp_chicken_blynkV14=1;//bool
}
else
{
digitalWrite(lamp_chick, 1);
Blynk.virtualWrite(V10,0);
// lamp_chick_led_v10.off();
Blynk.virtualWrite(V14,0);//ใส่//เพื่อให้สามารถรับงานครั้งต่อไปได้อีก
Blynk.setProperty(V14,"offLabel","OFF");
lamp_chicken_blynkV14=0;//bool
start_chicken_lamp=millis() ;
}
}
else
{
digitalWrite(lamp_chick, 1);
Blynk.virtualWrite(V10,0);
lamp_chick_led_v10.off();
Blynk.virtualWrite(V14,0);//ใส่//เพื่อให้สามารถรับงานครั้งต่อไปได้อีก
lamp_chicken_blynkV14=0;//bool
start_chicken_lamp=millis() ;
}
}
BLYNK_WRITE(V15)
{
delay(500);
int pin2Value = param.asInt(); // assigning incoming value from pin V1 to a variable
delay(500);
// You can also use:
// String i = param.asStr();
// double d = param.asDouble();
Serial.print("กำหนดให้รดน้ำตอนเย็นนาน: ");
Serial.print(pin2Value);
Serial.println("นาที");
periodMinevening_watering_V15 = pin2Value;
}
BLYNK_WRITE(V16)
{
delay(500);
int pin3Value = param.asInt(); // assigning incoming value from pin V1 to a variable
delay(500);
// You can also use:
// String i = param.asStr();
// double d = param.asDouble();
Serial.print("ห่างกัน: ");
Serial.print(pin3Value);
Serial.println("นาที");
not_within_min_V16 = pin3Value;
}
BLYNK_WRITE(V17)
{
delay(500);
int pin4Value = param.asInt(); // assigning incoming value from pin V1 to a variable
delay(500);
// You can also use:
// String i = param.asStr();
// double d = param.asDouble();
Serial.print("เริ่มเวลาตอนเช้า: ");
Serial.print(pin4Value);
Serial.println("น.");
start_am = pin4Value;
}
BLYNK_WRITE(V18)
{
delay(500);
int pin5Value = param.asInt(); // assigning incoming value from pin V1 to a variable
delay(500);
// You can also use:
// String i = param.asStr();
// double d = param.asDouble();
Serial.print("เสร็จตอนเช้า: ");
Serial.print(pin5Value);
Serial.println("น.");
end_am = pin5Value;
}
BLYNK_WRITE(V19)
{
delay(500);
int pin6Value = param.asInt(); // assigning incoming value from pin V1 to a variable
delay(500);
// You can also use:
// String i = param.asStr();
// double d = param.asDouble();
Serial.print("เริ่มเวลารดน้ำตอนเย็น: ");
Serial.print(pin6Value);
Serial.println("น.");
start_pm = pin6Value;
}
BLYNK_WRITE(V20)
{
delay(500);
int pin7Value = param.asInt(); // assigning incoming value from pin V1 to a variable
delay(500);
// You can also use:
// String i = param.asStr();
// double d = param.asDouble();
Serial.print("เสร็จเวลารดน้ำตอนเย็น: ");
Serial.print(pin7Value);
Serial.println("น.");
end_pm = pin7Value;
}
BLYNK_WRITE(V22) //เปิดโซลินอยด์ผักแบบแมนวล
{
if (param.asInt()==1)//1=ทำงาน
{//if (param.asInt()==1)//1=ทำงาน
if (solenoid_vegetable_auto_manual_V39_state==0 )//0=manual
{//if (solenoid_vegetable_auto_manual_V39_state==0 )//0=manual
digitalWrite(solenoid_vegetable_D7, 0);//active low 24 มิย. 65
solenoid_vegetable_led_blynk_v21.on();
Blynk.virtualWrite(V32,"=เวลา"+String(currentHour)+":"+String(currentMinute)+","+String(monthDay) + "/" + String(currentMonth));//V32(log เปิดรดน้ำฝัก)
}//if (solenoid_vegetable_auto_manual_V39_state==0 )//0=manual
else//if (solenoid_vegetable_auto_manual_V39_state==0 )//0=manual
{//else if (solenoid_vegetable_auto_manual_V39_state==0 )//0=manual
Serial.println("ไม่สามารถเปิดโซลินอยด์ได้เพราะ ใช้ในmanual เท่านั้น ");
}//else if (solenoid_vegetable_auto_manual_V39_state==0 )//0=manual
}//if (param.asInt()==1)//1=ทำงาน
else//if (param.asInt()==1)//1=ทำงาน
{//elseif (param.asInt()==1)//1=ทำงาน
if (solenoid_vegetable_auto_manual_V39_state==0 )//0=manual
{//if (solenoid_vegetable_auto_manual_V39_state==0 )//0=manual
digitalWrite(solenoid_vegetable_D7, 1);//active low 24 มิย. 65
solenoid_vegetable_led_blynk_v21.off();
Blynk.virtualWrite(V33,"=เวลา"+String(currentHour)+":"+String(currentMinute)+","+String(monthDay) + "/" + String(currentMonth));//V32(log ปิดรดน้ำฝัก)
}//if (solenoid_vegetable_auto_manual_V39_state==0 )//0=manual
else//if (solenoid_vegetable_auto_manual_V39_state==0 )//0=manual
{//else if (solenoid_vegetable_auto_manual_V39_state==0 )//0=manual
Serial.println("ไม่สามารถเปิดโซลินอยด์ได้เพราะ ใช้ในmanual เท่านั้น ");
}//else if (solenoid_vegetable_auto_manual_V39_state==0 )//0=manual
}//elseif (param.asInt()==1)//1=ทำงาน
}
BLYNK_WRITE(V25)
{
delay(500);
vegetable_soil_dryness_blynk_V25 = param.asInt(); // assigning incoming value from pin V1 to a variable
delay(500);
// You can also use:
// String i = param.asStr();
// double d = param.asDouble();
Serial.print("กำหนดความแห้งของดินที่ต้องรดน้ำ: ");
Serial.println(vegetable_soil_dryness_blynk_V25);
// periodMinevening_watering_V15 = pin2Value;
}
BLYNK_WRITE(V27)//กำหนดระยะเวลาที่พลืกไข่
{
int pinValue = param.asInt(); // assigning incoming value from pin V6 to a variable
// You can also use:
// String i = param.asStr();
// double d = param.asDouble();
Serial.print("ระยะเวลาที่พลืกไข่(วินาที): ");
Serial.println(pinValue);
move_ON_hatching_seconds_V27 = pinValue;
}
BLYNK_WRITE(V30) //พลิกไข่ ออโต้หรือแมนวล
{
if (param.asInt()==1)
{
hatching_move_auto_manual_v30_State=1;//1=ออโต้
}
else
{
hatching_move_auto_manual_v30_State=0;
}
}
BLYNK_WRITE(V31) //พลิกไข่แบบแมนวล
{//BLYNK_WRITE(V31) //พลิกไข่แบบแมนวล
if (hatching_move_auto_manual_v30_State==0 )//0=manual
{// if (hatching_move_auto_manual_v30_State==0 )//0=manual
if (param.asInt()==1)//1=ทำงาน
{//if (param.asInt()==1)//1=ทำงาน
digitalWrite(move_motor_hatching_D1, 0);
delay(500);
MoveLed_hatching_V4.on();
Blynk.virtualWrite(V38,"||"+string_open);
delay(500);
}//if (param.asInt()==1)//1=ทำงาน
else//if (param.asInt()==1)//1=ทำงาน
{//else if (param.asInt()==1)//1=ทำงาน
digitalWrite(move_motor_hatching_D1, 1);
delay(500);
MoveLed_hatching_V4.off();
Blynk.virtualWrite(V37,"||"+string_close);
delay(500);
}//else if (param.asInt()==1)//1=ทำงาน
} //if (hatching_move_auto_manual_v30_State==0 )//0=manual
else //if (hatching_move_auto_manual_v30_State==0 )//0=manual
{ //else if (hatching_move_auto_manual_v30_State==0 )//0=manual
Serial.println("ไม่สามารถหยุดพลิกไข่ได้เพราะ ใช้ในmanual เท่านั้น ");
Blynk.virtualWrite(V38,"||ไม่สามารถพลิกไข่ได้เพราะ ใช้ในmanual เท่านั้น");
delay(500);
Blynk.virtualWrite(V37,"||ไม่สามารถหยุดพลิกไข่ได้เพราะ ใช้ในmanual เท่านั้น");
delay(500);
}
}//BLYNK_WRITE(V31) //พลิกไข่แบบแมนวล
BLYNK_WRITE(V34)//กำหนดระยะเวลาหยุดพลืกไข่:
{
int pinValue = param.asInt(); // assigning incoming value from pin V6 to a variable
// You can also use:
// String i = param.asStr();
// double d = param.asDouble();
Serial.print("ระยะเวลาหยุดพลืกไข่( นาที): ");
Serial.println(pinValue);
move_OFF_hatching_min_V34 = pinValue;
}
BLYNK_WRITE(V39) //พลิกแบบออโต้หรือแมนวล
{
if (param.asInt()==1)//1=auto
{
hatching_move_auto_manual_v30_State=1;//1=ออโต้
}
else
{
hatching_move_auto_manual_v30_State=0;//0=manual
}
}
BLYNK_WRITE(V41)//กำหนดระยะเวลา เปิดพัดลมฟักไข่
{
int pinValue = param.asInt(); // assigning incoming value from pin V6 to a variable
// You can also use:
// String i = param.asStr();
// double d = param.asDouble();
Serial.print("ระยะเวลาเปิดพัดลมฟักไข่(วินาที): ");
Serial.println(pinValue);
ven_fan_for_breathing_second_ON_V41 = pinValue;
}
BLYNK_WRITE(V42)//กำหนดระยะเวลา ปิดพัดลมฟักไข่
{
int pinValue = param.asInt(); // assigning incoming value from pin V6 to a variable
// You can also use:
// String i = param.asStr();
// double d = param.asDouble();
Serial.print("ระยะเวลาปิดพัดลมฟักไข่(นาที): ");
Serial.println(pinValue);
ven_fan_for_breathing_min_OFF_V42 = pinValue;
}
BLYNK_WRITE(V43) //พัดลม ออโต้หรือแมนวล
{
if (param.asInt()==1)
{
ven_fan_hatching_auto_manual_v43_State=1;//1=ออโต้
}
else
{
ven_fan_hatching_auto_manual_v43_State=0;
}
}
BLYNK_WRITE(V44) //เปิดพัดลมแบบแมนวล
{//BLYNK_WRITE(V44) //เปิดพัดลมแบบแมนวล
if (ven_fan_hatching_auto_manual_v43_State==0 )//0=manual
{
if (param.asInt()==1)//1=ทำงาน
{//if (param.asInt()==1)//1=ทำงาน
digitalWrite(ven_fan_hatching_D3, 0);
Blynk.virtualWrite(V47,"||"+string_open);
delay(500);
CoolingLed_hatching_V6.on();
VenLed_hatching_V5.on();
// Serial.println("ไม่สามารถเปิดพัดลมได้เพราะ ใช้ในmanual เท่านั้น ");
}//if (param.asInt()==1)//1=ทำงาน
else//if (param.asInt()==1)//1=ทำงาน
{//else if (param.asInt()==1)//1=ทำงาน
digitalWrite(ven_fan_hatching_D3, 1);
Blynk.virtualWrite(V46,"||"+string_close);
delay(500);
CoolingLed_hatching_V6.off();
VenLed_hatching_V5.off();
// Serial.println("ไม่สามารถเปิดพัดลมได้เพราะ ใช้ในmanual เท่านั้น ");
}//else if (param.asInt()==1)//1=ทำงาน
}
}//BLYNK_WRITE(V44) //เปิดพัดลมแบบแมนวล
void read_hatching_day1_eeprom()
{
EEPROM.begin(512);
Serial.print("back_num10=");
back_num10 = EEPROM.read(110);
delay(500);
Serial.println(back_num10*1);
Serial.print("back_num9=");
back_num9 = EEPROM.read(109);
delay(500);
Serial.println(back_num9*10);
Serial.print("back_num8=");
back_num8 = EEPROM.read(108);
delay(500);
Serial.println(back_num8*100);
Serial.print("back_num7=");
back_num7 = EEPROM.read(107);
delay(500);
Serial.println(back_num7*1000);
Serial.print("back_num6=");
back_num6 = EEPROM.read(106);
delay(500);
Serial.println(back_num6*10000);
Serial.print("back_num5=");
back_num5 = EEPROM.read(105);
delay(500);
Serial.println(back_num5*100000);
Serial.print("back_num4=");
back_num4 = EEPROM.read(104);
delay(500);
Serial.println(back_num4*1000000);
Serial.print("back_num3=");
back_num3 = EEPROM.read(103);
delay(500);
Serial.println(back_num3*10000000);
Serial.print("back_num2=");
back_num2 = EEPROM.read(102);
delay(500);
Serial.println(back_num2*100000000);
Serial.print("back_num1=");
back_num1 = EEPROM.read(101);
delay(500);
Serial.println(back_num1*1000000000);
Serial.println("==================================");
Serial.println("Total=");
epoch2=(back_num1*1000000000)+(back_num2*100000000)+(back_num3*10000000)+(back_num4*1000000)+(back_num5*100000)+(back_num6*10000)+(back_num7*1000)+(back_num8*100)+(back_num9*10)+(back_num10*1);
Serial.println(epoch2);
delay(1000);
// epoch3 = (epoch2) ;
Blynk.virtualWrite(V51,epoch2);
delay(500);
time_t t = epoch2;//(pinValue) + 25200;
Serial.println(ctime(&t));
ttt = ctime(&t);//String ttt
//Serial.print("Length_String = ");
//Length_String = ttt.length();
//Serial.println(Length_String); // แสดงผลออกทาง Serial Monitor
Blynk.virtualWrite(V52,ttt);
delay(500);
}
BLYNK_WRITE(V50) //เช็ควันที่ในeeprom push button
{
if (param.asInt()==1)//1=เช็ค 0=หยุดเช็ค
{//if (param.asInt()==1)//1=เช็ค 0=หยุดเช็ค
read_hatching_day1_eeprom();
delay(2000);
}//if (param.asInt()==1)//1=เช็ค 0=หยุดเช็ค
}
BLYNK_WRITE(V53)//กำหนดวันแรกที่ฟักไข่ แบบ epoch time stepH step ละ0.5ขั่วโมง หรือ 1800ms
{
int pinValue = param.asInt(); // assigning incoming value from pin V6 to a variable
Serial.print(" ");
Serial.println(pinValue);
time_t epoch5 = epoch1+(pinValue*3600) ;
epoch3=epoch5;
// epoch5=epoch;
// epoch = epoch5;//String ttt
ttt = ctime(&epoch5);//String ttt
Serial.println(ttt);
// Serial.print("Length_String = ");
// Length_String = ttt.length();
// Serial.println(Length_String); // แสดงผลออกทาง Serial Monitor
Blynk.virtualWrite(V49,epoch5);
delay(500);
Blynk.virtualWrite(V59,epoch5);
delay(500);
Blynk.virtualWrite(V48,ttt);
delay(500);
Blynk.syncVirtual(V49,V56,V59);
delay(500);
}
BLYNK_WRITE(V54)//กำหนดวันแรกที่ฟักไข่ แบบ epoch time stepH step ละ86400s หรือ 24ขั่วโมง
{
int pinValue = param.asInt(); // assigning incoming value from pin V6 to a variable
Serial.print("กำหนดวันแรกที่ฟักไข่ แบบ epoch time: ");
Serial.println(pinValue);
time_t epoch5 = epoch4+(pinValue*86400);
delay(500);
// epoch5=epoch;
// Serial.println(ctime(&epoch5));
// ttt = ctime(&epoch5);//String ttt
// t = epoch5;//String ttt
epoch1=epoch5;
epoch3=epoch5;
ttt = ctime(&epoch5);//String ttt
Serial.println(ttt);
// Serial.print("Length_String = ");
// Length_String = ttt.length();
// Serial.println(Length_String); // แสดงผลออกทาง Serial Monitor
Blynk.virtualWrite(V49,epoch5);
delay(500);
Blynk.virtualWrite(V59,epoch5);
delay(300);
Blynk.virtualWrite(V48,ttt);
delay(300);
Blynk.syncVirtual(V49,V56,V59);
delay(500);
}
BLYNK_WRITE(V56)//ปุ่มอนุญาติเขียนลงในeeprom1
{//BLYNK_WRITE(V56)//ปุ่มอนุญาติเขียนลงในeeprom1
int button1=param.asInt();
if (button1 == 1)//1=ไม่ล๊อค,0=ล๊อก
{//if button1 == 1;
//ให้ปุ่ม2(v57) ทำงานได้
//แจ้งในV58 ว่าปลดล๊อกแล้ว
Blynk.virtualWrite(V58,"||"+String(currentDate)+","+String(formattedTime));
delay(500);
Blynk.virtualWrite(V58,"=>ได้ปลดล๊อกแล้ว");
delay(500);
//เปลี่ยนstate write_eeprom_permission_V56_state=1;
//แจ้งในV58 ค่าepoch5 ที่ต้องการเขียน
Blynk.virtualWrite(V58,"||epoch3="+String(epoch3));
delay(500);
Blynk.virtualWrite(V58,"||รอการเขียน");
delay(500);
// time_t epoch5 = epoch5 ;
Blynk.virtualWrite(V59,epoch3);
delay (500);
write_eeprom_permission_V56_state=1;
Blynk.setProperty(V57,"offLabel","ไม่เขียน");
delay(500);
// Blynk.setProperty(V57,"label","ไม่เขียน");
Blynk.virtualWrite(V57,LOW);
delay(500);
Blynk.setProperty(V57, "isDisabled", false);
delay(500);
Blynk.syncVirtual(V56,V57,V58,V59);
มีต่อ(บรรทัดที่ 701-1500)อีกครับ ในกระทู้ถัดไป