#include <DHT.h>
#define DHTPIN PA1
#define DHTTYPE DHT22
#define SOIL_PIN PA0
#define PUMP_PIN PA5
// Thresholds
#define SOIL_DRY 35
#define SOIL_WET 50
#define TEMP_HIGH 30
#define HUM_LOW 50
#define HUM_HIGH 70
DHT dht(DHTPIN, DHTTYPE);
bool pumpState = false;
unsigned long pumpStartTime = 0;
void setup() {
Serial.begin(9600);
pinMode(PUMP_PIN, OUTPUT);
digitalWrite(PUMP_PIN, LOW);
dht.begin();
}
void loop() {
int temp = (int)dht.readTemperature();
int hum = (int)dht.readHumidity();
int soil_raw = analogRead(SOIL_PIN);
int soil_percent = (soil_raw * 100) / 1024;
if (isnan(temp) || isnan(hum)) {
temp = 30;
hum = 50;
}
Serial.print("Temp: ");
Serial.print(temp);
Serial.print("C Hum: ");
Serial.print(hum);
Serial.print("% Soil: ");
Serial.print(soil_percent);
Serial.println("%");
if (!pumpState &&
soil_percent <= SOIL_DRY &&
(temp >= TEMP_HIGH || hum <= HUM_LOW)) {
pumpState = true;
pumpStartTime = millis();
digitalWrite(PUMP_PIN, HIGH);
Serial.println(">> Pump ON (Dry + Hot/Low Hum)");
}
else if (pumpState &&
(soil_percent >= SOIL_WET || hum >= HUM_HIGH)) {
pumpState = false;
digitalWrite(PUMP_PIN, LOW);
Serial.println(">> Pump OFF (Wet soil / High Hum)");
}
if (pumpState && (millis() - pumpStartTime > 10000)) {
pumpState = false;
digitalWrite(PUMP_PIN, LOW);
Serial.println(">> Pump OFF (Safety Timeout)");
}
Serial.println("--------------------------");
delay(2000);
}