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

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

BlynkTimer timer;
DHT dht(DHTPIN, DHTTYPE);
void myTimerEvent()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  if (isnan(h) || isnan(t)) 
  {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  else
  {
    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: ");
    Serial.println(t);
    Blynk.virtualWrite(V1, h); 
    Blynk.virtualWrite(V2, t);
    
 
  }
}
void setup()
{
  pinMode(4, OUTPUT);  //ตั้งค่าขา 4 เป็น output
  pinMode(5, OUTPUT);  //ตั้งค่าขา 5 เป็น output
  Serial.begin(115200); // เริ่มตั้นการสื่อสารที่ 115200
  dht.begin();
  Blynk.begin(auth, ssid, pass);
  timer.setInterval(2000L, myTimerEvent);
 
  
}

void loop()
{
  int sensorValue  ;
  sensorValue = analogRead(sensorPin);
  sensorValue = map(sensorValue, 0, 1023, 0, 100);
  Serial.print("Soil moisture: ");
  Serial.print(sensorValue);
  Serial.println(" %");
  Blynk.run();
  timer.run(); // Initiates BlynkTimer
  delay(500); //wait for half a second, so it is easier to read
      if(sensorValue > 80)
      {
   digitalWrite(5,HIGH);
  }
   else  {
    digitalWrite(5,LOW);
    Blynk.virtualWrite(A0,5);
  }
 
 
  }

ปุ่มกำหนด Vpin ไหนไว้ครับ

Stop แล้วแคปมาให้ดูหน่อย

กะแล้วว่าต้องกำหนด ตรงๆ แบบนี้ จริงๆ ถ้าเรากำหนดแบบนี้เป็น gp5 มันจะสั่ง on โดยตรงเลยครับ ทำให้เราไม่สามารถ สั่ง on off ที่ปุ่มหน้าแอฟ ได้

ดังนั้นเราต้อง เปลี่ยนให้เป็น Vpin ที่ยังว่างอยู่ เช่น V3 ตัวอื่นที่เป็น gp5 ก็ต้องเปลี่ยนตามไปด้วย

โค้ตที่ต้องเปลี่ยนต้องสั่งงานแบบนี้

 if(sensorValue > 80)
      {
   digitalWrite(5,HIGH);
   Blynk.virtualWrite(A3,1); //คำสั่งให้ปุ่ม on
  }
   else  {
    digitalWrite(5,LOW);
    Blynk.virtualWrite(A3,0); // สั่งให้ปุ่ม off
  }

แล้วอย่างลืมเพิ่มคำสั่งให้เวลาที่เรากดปุ่ม on/off ที่ V3 ให้มันทำงานด้วย ถ้าเราไม่ใส่กดยังไง relay เราก็ไม่ on

BLYNK_WRITE(V3) 
{
   if (param.asInt()==1) { // เมื่อ V3 มีค่าเป็น 1
        digitalWrite(5, HIGH); // Relay on
        
        }
   }else{
        digitalWrite(5, LOW); //Relay off
        

   }
}

โค้ตชุดล่าสุดใส่ต่อมาจาก void loop เลยนะครับ อย่าเอาไปใส่ในนั้น

void loop (){
// คำสั่ง
}

BLYNK_WRITE(V3) 
{
   if (param.asInt()==1) { // เมื่อ V3 มีค่าเป็น 1
        digitalWrite(5, HIGH); // Relay on
        
        }
   }else{
        digitalWrite(5, LOW); //Relay off

   }
}
void loop()
BLYNK_WRITE(V3)
{
  if(param.asInt()==1){
    digitalWrite(5,HIGH);
  }
  
else{digitalWrite(5,LOW);
}
{
  int sensorValue  ;
  sensorValue = analogRead(sensorPin);
  sensorValue = map(sensorValue, 0, 1023, 0, 100);
  Serial.print("Soil moisture: ");
  Serial.print(sensorValue);
  Serial.println(" %");
  Blynk.run();
  timer.run(); // Initiates BlynkTimer
  delay(500); //wait for half a second, so it is easier to read
     
      if(sensorValue > 80)
      {
   digitalWrite(5,HIGH);
   Blynk.virtualWrite(V3,1);
  }
   else  {
    digitalWrite(5,LOW);
    Blynk.virtualWrite(V3,0);
  }
 
  }

แบบนี้หรอค่ะ แต่มันยังติด Error

ผิดครับต้องแบบนี้

int sensorValue;
void loop()
{
  sensorValue = analogRead(sensorPin);
  sensorValue = map(sensorValue, 0, 1023, 0, 100);
  Serial.print("Soil moisture: ");
  Serial.print(sensorValue);
  Serial.println(" %");
  Blynk.run();
  timer.run(); // Initiates BlynkTimer
  delay(500); //wait for half a second, so it is easier to read
     
      if(sensorValue > 80)
      {
   digitalWrite(5,HIGH);
   Blynk.virtualWrite(V3,1);
  }else{
    digitalWrite(5,LOW);
    Blynk.virtualWrite(V3,0);
  }
 
}

BLYNK_WRITE(V3)
{
  if(param.asInt()==1){

    digitalWrite(5,HIGH);

  }else{

digitalWrite(5,LOW);

  }
}

ติด Token ค่ะ

ก๊อปมาทั้งหมดเลยครับ

ได้แล้วค่ะ ขอบคุณมากนะคะ

แต่ถ้าอยากสั่งงานแบบ Manual ด้วยในปุ่มเดียวกันจะได้ไหมค่ะ

แก้ตรงไหนถึงได้ครับ

โค้ตชุดนั้นก็สั่งได้ทั้ง Manual และด้วยค่าจากความชื้นแล้วนะครับ

คือพอกดสั่งแบบ Manual แล้ว มันก็ปิดเองเลยค่ะ
และตัวสั่งงานแบบตั้งเวลาก็ปิดเองเหมือนกัน

อุปกรณ์ต่อ แบบ active low รึป่าวครับ แก้จาก HIGH เป็น LOW และส่วนที่เป็น LOW เป็น HIGH ดูครับ

ถ้ายังไม่ได้ลองเอาโค้ตมาดูก่อนครับ อธิบายด้วยว่ากดอะไรเป็นยังไงบ้าง