การจะดึง ค่าความชื้นมาเปรียบเทียบ เขียนโค้ดยังไงดีครับ

ผมต้องการดึงค่าความชื้นกับอุณหะภูมิมาเปรียบเทียบ กับค่าที่กำหนดอ่ะครับ
ยกตัวอย่าง

if ความชื้น<70
  {รีเรย์ทำงาน}
else{รีเรย์หยุด}
if อุณหะภูมิ>25
  {รีเรย์ทำงาน}
else{รีเรย์หยุด}

ควรเขียนโค้ดแบบไหนดีครับ

โค้ดปจุบัน

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>
#include <SimpleTimer.h>
#define DHTPIN D4 // กำหนดขาให้กับอุปกรณ์ตรวจสอบความชื้น DHT11
#define DHTTYPE DHT11
//////////////////////////////////////////จุดที่เพิ่ม

int setTemp;
int setHumid;

BLYNK_WRITE(V4) //temperature slider in app on pin V22
{
setTemp = param.asInt();
}
BLYNK_WRITE(V3) //temperature slider in app on pin V23
{
setHumid = param.asInt();
}

//////////////////////////////////////////

DHT dht(DHTPIN, DHTTYPE);
SimpleTimer timer;

//* **BLYNK TOKEN** //
char auth[] = "XXXXXXXXXXXXXXXX";
char ssid[] = "AndroidAP";
char pass[] = "123654789a";

void setup()
{

Serial.begin(115200);


}

BLYNK_CONNECTED() {
Blynk.syncAll();
}

void sendSensor()
{
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();

  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
   Blynk.virtualWrite(V1, t); 
 Blynk.virtualWrite(V2, h);

  Serial.println("Humidity: ");
  Serial.print(h + String("%"));
  Serial.println("Temperature: ");
  Serial.print(t + String("c"));

}


void loop()
{
//if(Blynk.connected()) {
Blynk.run();
timer.run();

}

ผมพอมีตัวอย่างครับ

if ( t > v6 && t <= v7 ) {
          //Blynk.virtualWrite(V17, t);
         // Blynk.virtualWrite(V10, 1);
          digitalWrite(D7, HIGH);
         // led_3.on();

        }
        else
        {
          //Blynk.virtualWrite(V17, t);
         // Blynk.virtualWrite(V10, 0);
          digitalWrite(D7, LOW);
         // led_3.off();
        }

        if ( h > v4 && h <= v5 ) {
          //Blynk.virtualWrite(V18, h);
         // Blynk.virtualWrite(V10, 1);
          digitalWrite(D7, HIGH);
         // led_2.on();

        }

        else
        {
         // Blynk.virtualWrite(V18, h);
         // Blynk.virtualWrite(V10, 0);
          digitalWrite(D7, LOW);
          //led_2.off();
        }

V4, V5, V6 ,V7 แก้ไขเป็นตัวเลขครับ

1 Likes

อันนี้เลาแทน h t ได้โดยไม่ต้องเขียนอ่ะไรเพิ่มแล้วใช่ป่าวครับ

t กับ h รับค่า มาจากส่วนนี้อยู่แล้วครับ เอาไปใช่ได้เลย

โค้ดนี้ผมสั่งการให้ รีเลย์ตัว 1 ทำงานเมื่อ t สูงกว่า 25 และ รีเลย์ตัวที่ 2 ทำงานเมื่อ h ต่ำกว่า 70

รบกวนตรวจสอบโค้ดให้หน่อยครับว่าผมเรียงลำดับถูกไหม

#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>

char auth[] = "1";

char ssid[] = "qqq";
char pass[] = "qqq";

#define DHTPIN D4 
#define DHTTYPE DHT11 // DHT 11

DHT dht(DHTPIN, DHTTYPE);
SimpleTimer timer;

int Relay1 = D0;
int Relay2 = D1;

void sendSensor()
{
float h = dht.readHumidity();
float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit

if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;

}
{
pinMode(Relay1, OUTPUT); 
digitalWrite(Relay1, HIGH);
pinMode(Relay2, OUTPUT); 
digitalWrite(Relay2, HIGH);
}

if (  t > 25 ) {
        digitalWrite(Relay1, LOW);

        }

        else
        {
        digitalWrite(Relay1, HIGH);
        }
if (  h < 70 ) {
        digitalWrite(Relay2, LOW);

        }

        else
        {
        digitalWrite(Relay2, HIGH);
        }

Blynk.virtualWrite(V5, h);
Blynk.virtualWrite(V6, t);
}

void setup()
{
Serial.begin(115200); // See the connection status in Serial Monitor
Blynk.begin(auth, ssid, pass);

dht.begin();

// Setup a function to be called every second
timer.setInterval(1000L, sendSensor);
}

void loop()
{
Blynk.run(); // Initiates Blynk
timer.run(); // Initiates SimpleTimer
}

เขียนมาถูกทางแล้วครับ