ต้องการทำรดน้ำต้นไม้อัตโนมัติ esp32

ช่วยแนะนำการเขียนโค๊ดของบอร์ด esp32
ต้องการให้รดน้ำเมื่อความชื้นต่ำกว่าที่เรากำหนดค่าเป็น% แต่ค่าสูงสุดออกมาที่ 132% ต้องแก้ยังไงให้ค่าสูงสุดอยู่ที่100% ครับ

#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

char auth[] = "VODeiDyvbn8F07De-Cuqr6YG9OdfFHp9";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "I'm your hope";
char pass[] = "hopeworld";

#define WATER_PUMP 18
int soil_sensor = 34 ;
const int ledPin = 2 ;

int output_value;
int moisturelevel;


BlynkTimer timer;

void sendUptime ()
{
  output_value = analogRead(soil_sensor);
  moisturelevel = map(output_value, 1000, 4095, 100, 0);
  Blynk.virtualWrite(V5, moisturelevel);
}


void setup() {
  // put your setup code here, to run once:
Serial.begin(115200);
  //Blynk.begin(auth, ssid, pass);
  Blynk.begin(auth, ssid, pass, "blynk.honey.co.th", 8080);
  pinMode(WATER_PUMP,OUTPUT);

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

}

void loop() {
output_value = moisturelevel;
Serial.println(output_value);
delay(1000);
  if (output_value > 60 ) 
{
    digitalWrite(WATER_PUMP,HIGH);
    
} 
  else 
   { 
    digitalWrite(WATER_PUMP,LOW);
    
   }
   
Blynk.run();
timer.run();

}

moisturelevel = map(output_value, 1000, 4095, 100, 0);

Syntax

map(value, fromLow, fromHigh, toLow, toHigh)

ลองพิจารณาดูการสเกลค่าใหม่นะครับ ผมว่าคุณสเกลมันแปลกๆ ครับ
น่าจะเป็นแบบนี้หรือเปล่าครับ
moisturelevel = map(output_value, 0, 4095, 100, 0);
หรือ
moisturelevel = map(output_value, 0, 4095, 0, 100);
ขึ้นอยู่กับ sensor ส่งค่าด้านไหนมาตอน min กับ max

1 Like