ตอนนี้ผลลัพธ์การทำงานเป็นอย่างไรครับ
ตามนี้เลยครับ
ขอดูโค้ตที่ใช้อยู่หน่อยครับ
ขอโทษที่ตอบช้านะครับ
#include <ESP8266WiFi.h>
#include <Blynk.h>
#include <DHT.h>
#include <BlynkSimpleEsp8266.h>
#define BLYNK_PRINT
char auth[] = ""; //Blynk auth token
char ssid[] = ""; //WiFi SSID
char pass[] = ""; //WiFi password
BlynkTimer timer;
//SOIL SENSOR
const int Relay1 = 14; //pin D3
const int SoilPin = A0; //พินที่ใช้รับค่า
int sensorValue = 0; // ตัวแปรค่า Analog
int outputValue = 0; // ตัวแปรสำหรับ Map เพื่อคิด %
int soil;
//ควบคุม PUMP จาก BLYNK //ตรงนี้ยังไม่ถูกนะครับ ยังมั่วอยู่5555
BLYNK_WRITE(V1){
if(param.asInt()== 0){
digitalWrite(Relay1, HIGH);
}else{
digitalWrite(Relay1, LOW);
}
}
void sendSensor(){
//SOIL
Blynk.virtualWrite(V2, soil);
}
void setup() {
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
//SOIL
pinMode(SoilPin, INPUT);
pinMode(Relay1, OUTPUT);
timer.setInterval(2000L, sendSensor);
}
void loop() {
Blynk.run();
timer.run();
//soil
sensorValue = analogRead(SoilPin);
outputValue = map(sensorValue, 0, 1023, 0, 100);
Serial.print("Soil moisture: ");
Serial.print(outputValue);
Serial.println(" %");
delay(2000);
soil = outputValue;
//SOIL AUTO
if(soil > 60) {
digitalWrite(Relay1, LOW);
Blynk.virtualWrite(V1,0);
}
else{
digitalWrite(Relay1, HIGH);
Blynk.virtualWrite(V1,1);
}
}
อยากรู้ว่าเราวิเคราะห์ว่าอย่างไรครับว่า ทำไมกดปิดตอนใช้ auto แล้วมันติดเหมือนเดิม คำตอบจะอยู่ในช่วงนี้ เอาที่เราเข้าใจตอนนี้ ผิดถูกไม่เป็นไรครับ จะได้จูนกันถูกจุด
ตรงนี้มันเข้าเงื่อนไขตลอดครับ ถึงจะกดปิด มันก็จะเปิด อะครับ
มันต้องเพิ่มเงื่อนไข เข้าไป ใช่มั้ยครับ
//SOIL AUTO
if(soil > 60) {
digitalWrite(Relay1, LOW);
Blynk.virtualWrite(V1,0);
}
else{
digitalWrite(Relay1, HIGH);
Blynk.virtualWrite(V1,1);
}
}
ถูกต้องครับเพราะว่ามันวิ่งผ่าน
digitalWrite(Relay1, HIGH);
Blynk.virtualWrite(V1,1);
ตลอดต่อให้ไปกดปิดที่ปุ่มก็ตาม ทีนี้ลองคิดเงื่อนในง่ายๆ อย่าง
if() {
/////
}
อะไรให้มันทำงานคำสั่งนี้แค่ครั้งเดียวอ่ะครับ