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

สมาร์ทฟาร์ม

(Tip Sr) #1

ขอสอบถามหน่อยค่ะ คือตอนนี้ รับค่าจาก ค่าความชื้นในดิน เพื่อเปิด รีเลย์ ได้แล้วค่ะ แต่ 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);
  }
 
 
  }

(Permpol Thanapunnamas) #2

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


(Permpol Thanapunnamas) #3

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


(Tip Sr) #4


(Permpol Thanapunnamas) #5

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

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


(Permpol Thanapunnamas) #6

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

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

(Permpol Thanapunnamas) #7

แล้วอย่างลืมเพิ่มคำสั่งให้เวลาที่เรากดปุ่ม 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
        

   }
}

(Permpol Thanapunnamas) #8

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

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

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

   }
}

(Tip Sr) #9
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);
  }
 
  }

(Tip Sr) #10

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


(Permpol Thanapunnamas) #11

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

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);

  }
}

(Tip Sr) #12

ติด Token ค่ะ


(Permpol Thanapunnamas) #13

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


(Tip Sr) #14

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

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


(Permpol Thanapunnamas) #15

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


(Permpol Thanapunnamas) #16

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


(Permpol Thanapunnamas) opened #18

(Tip Sr) #19

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


(Permpol Thanapunnamas) #20

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


(Permpol Thanapunnamas) #21

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