ช่วยดูโค้ดหน่อยค่ะ ไฟแสดงสถานะปั๊มทำงานจะติดตลอดตามที่กำหนดระยะให้ปั๊มทำงานในโหมดออโต้ แต่พอปรับมาใช้โหมดแมนนวลไฟแสดงสถานะที่ควรจะดับในตอนที่กดปุ่มปิดมันไม่ดับตลอด จะดับแค่ช่วงเดียวแล้วติดเหมือนเดิม
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <BlynkSimpleEsp8266.h>
#include<SoftwareSerial.h>
#include <TridentTD_LineNotify.h>
#include <SimpleTimer.h>
SoftwareSerial mySerial(D5,D6);
SimpleTimer timer;
#define LINE_TOKEN "arVfAiThZfWRaGfjr4CFJaa2HQqONiWng9ctEnfRwaO"
#define flow_sensor 2
char auth[] = "aNlhXZZvBaF0gAN5kqxZgXmDuOf14few";
char ssid[] = "許玉林";
char pass[] = "fern2543";
unsigned char data[4]={};
int distance;
int waterlevel;
const int Auto = D0;
const int Relay = D1;
int ATON=0; // เช็คการทำงานของ Pump ON
int ATOFF=0; // เช็คการทำงานของ Pump OFF
int CHLV1=0; // เช็คการทำงานของ Leval 1
int CHLV2=0; // เช็คการทำงานของ Leval 2
int CHLV3=0; // เช็คการทำงานของ Leval 3
int VL=0; // ปริมาตรของน้ำ
int K=0; // เช็คการทำงานของ Auto mode
int L=0; // เช็คการทำงานของ Manual mode
int FL=0; // เช็คการทำงานของ FLOW
WidgetLCD LCD(V0);
WidgetLED LEDPUMP(V4); // PUMP
WidgetLED LEDAuto(V5); // Auto
WidgetLED LEDManual(V6); // Manual
void setup()
{
Blynk.begin(auth, ssid, pass, "blynk.iot-cm.com", 8080);
LINE.setToken(LINE_TOKEN);
pinMode(flow_sensor, INPUT);
pinMode(Auto, OUTPUT);
pinMode(Relay, OUTPUT);
pinMode(D2, OUTPUT);
Serial.begin(57600);
mySerial.begin(9600);
digitalWrite(Auto, HIGH);
digitalWrite(Relay, HIGH);
digitalWrite(D2, HIGH);
LEDPUMP.off();
timer.setInterval(100, sensor);
}
void sensor()
{
do{
for(int i=0;i<4;i++)
{
data[i]=mySerial.read();
}
}while(mySerial.read()==0xff);
mySerial.flush();
if(data[0]==0xff)
{
int sum;
sum=(data[0]+data[1]+data[2])&0x00FF;
if(sum==data[3])
{
distance=(data[1]<<8)+data[2];
if(distance>280)
{
Serial.print("distance=");
Serial.print(distance/10);
Serial.println("cm");
}
else
{
Serial.println("Below the lower limit");
}
}
else Serial.println("ERROR");
}
delay(100);
}
void ControlPump()
{
sensor();
waterlevel=(550-(distance/10));
Serial.println(waterlevel);
Blynk.virtualWrite(V10,waterlevel);
VL= (waterlevel*0.01*6*86.7);
Blynk.virtualWrite(V11,VL);
if((waterlevel>200))
{
ATON++;
ATOFF=0;
LEDPUMP.on();
digitalWrite(Relay, LOW);
Serial.println(" Pump ON");
Serial.println("ATON=");
Serial.println(ATON);
if( ATON==1)
{
Serial.println("OPEN");
LINE.notify("PUMP ON");
}
}
if(waterlevel <= 200)
{
ATOFF++;
ATON=0;
FL=0;
LEDPUMP.off();
digitalWrite(Relay, HIGH);
Serial.println("Pump OFF");
Serial.println("ATOFF=");
Serial.println(ATOFF);
if(ATOFF==1)
{
Serial.println("CLOSE");
LINE.notify("PUMP OFF");
}
}
}
void checklevel()
{
sensor();
if (waterlevel <260)
{
CHLV1++;
CHLV2=0;
CHLV3=0;
Serial.println("CHLV1=");
Serial.println(CHLV1);
LCD.clear();
LCD.print(0,0," Level 1 ");
LCD.print(0,1," It's OK. ");
if( CHLV1==1)
{
Serial.println("slightly higher water");
Serial.println("Level 1");
LINE.notify("Level 1");
LINE.notify("slightly higher water");
}
}
if((waterlevel >=260) && (waterlevel <300))
{
CHLV2++;
CHLV1=0;
CHLV3=0;
Serial.println("CHLV2=");
Serial.println(CHLV2);
LCD.clear();
LCD.print(0,0," Level 2 ");
LCD.print(0,1," Will you pump? ");
if( CHLV2==1)
{
Serial.println("medium water level");
Serial.println("Level 2");
LINE.notify("Level 2");
LINE.notify("medium water level");
}
}
if (waterlevel >=300)
{
CHLV3++;
CHLV1=0;
CHLV2=0;
Serial.println("CHLV3=");
Serial.println(CHLV3);
LCD.clear();
LCD.print(0,0," Level 3 ");
LCD.print(0,1," It's crisis! ");
if( CHLV3==1)
{
Serial.println("It's crisis!");
Serial.println("Level 3");
LINE.notify("Level 3");
LINE.notify("It's crisis!");
}
}
}
void flow()
{
uint32_t pulse = pulseIn(flow_sensor,HIGH);
float Hz = 1/(2*pulse*pow(10,-6));
float flow = 7.2725*(float)Hz + 3.2094;
Serial.print(Hz);
Serial.print("Hz\t");
Serial.print(flow/60);
Serial.println(" L/minute");
Blynk.virtualWrite(V14,(flow/60));
if((pulse < 1)&&(waterlevel>200))
{
FL++;
}
if(( FL==1)&&(waterlevel>200))
{
delay(5000);
LINE.notify("น้ำไม่ไหล กรุณารีบไปแก้ไขโดยด่วน");
}
delay(1000);
}
BLYNK_WRITE(V1) // Auto/Manual
{
int buttonState = param.asInt();
if(buttonState == 1)
{
digitalWrite(Auto, LOW);
LEDAuto.on();
LEDManual.off();
}
if(buttonState == 0)
{
digitalWrite(Auto, HIGH);
LEDAuto.off();
LEDManual.on();
}
}
BLYNK_WRITE(V2) // Start Manual
{
int buttonState = param.asInt();
if(buttonState == 1)
{
digitalWrite(D2, LOW);
LEDPUMP.on();
LINE.notify("PUMP ON");
}
}
BLYNK_WRITE(V3) // Stop Manual
{
int buttonState = param.asInt();
if(buttonState == 1)
{
digitalWrite(D2, HIGH);
LEDPUMP.off();
LINE.notify("PUMP OFF");
}
}
void loop()
{
sensor();
ControlPump();
checklevel();
flow();
timer.run();
Blynk.run();
}