ขอสอบถามหน่อยค่ะ คือตอนนี้ รับค่าจาก ค่าความชื้นในดิน เพื่อเปิด รีเลย์ ได้แล้วค่ะ แต่ปุ่ม Button มันไม่เปิดปิดตาม ต้องทำยังไงค่ะ

ตอนนี้ผลลัพธ์การทำงานเป็นอย่างไรครับ

ตามนี้เลยครับ

ขอดูโค้ตที่ใช้อยู่หน่อยครับ

ขอโทษที่ตอบช้านะครับ


#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 แล้วมันติดเหมือนเดิม คำตอบจะอยู่ในช่วงนี้ เอาที่เราเข้าใจตอนนี้ ผิดถูกไม่เป็นไรครับ จะได้จูนกันถูกจุด

image

ตรงนี้มันเข้าเงื่อนไขตลอดครับ ถึงจะกดปิด มันก็จะเปิด อะครับ
มันต้องเพิ่มเงื่อนไข เข้าไป ใช่มั้ยครับ

//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() {
/////
}

อะไรให้มันทำงานคำสั่งนี้แค่ครั้งเดียวอ่ะครับ