#include <LiquidCrystal_I2C.h>
const int moisturePin = A0;
const int buzzerPin = D2;
const int relayPin = D3;
const int tankPin = D4;
int threshold = 300;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
pinMode(relayPin, OUTPUT);
pinMode(tankPin, INPUT_PULLDOWN);
digitalWrite(relayPin, LOW);
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Smart Irrigation");
lcd.setCursor(0, 1);
lcd.print("System Starting");
delay(2000);
lcd.clear();
}
void loop() {
int moisture = analogRead(moisturePin);
int tankStatus = digitalRead(tankPin);
Serial.print("Moisture: ");
Serial.println(moisture);
lcd.clear();
// Tank empty
if (tankStatus == LOW) {
lcd.setCursor(0, 0);
lcd.print("Tank Empty!");
lcd.setCursor(0, 1);
lcd.print("Pump OFF");
digitalWrite(relayPin, LOW);
tone(buzzerPin, 1000);
delay(500);
noTone(buzzerPin);
delay(500);
return;
}
// Dry soil
if (moisture < threshold) {
lcd.setCursor(0, 0);
lcd.print("Dry Soil");
lcd.setCursor(0, 1);
lcd.print("Pump ON");
Serial.println("Dry soil detected");
Serial.println("Pump ON");
digitalWrite(relayPin, HIGH);
tone(buzzerPin, 1500);
delay(5000);
digitalWrite(relayPin, LOW);
noTone(buzzerPin);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pump OFF");
lcd.setCursor(0, 1);
lcd.print("Timer Complete");
delay(2000);
}
// Wet soil
else {
lcd.setCursor(0, 0);
lcd.print("Soil OK");
lcd.setCursor(0, 1);
lcd.print("No Watering");
digitalWrite(relayPin, LOW);
noTone(buzzerPin);
Serial.println("Soil moisture sufficient");
delay(1000);
}
}Loading
st-nucleo-c031c6
st-nucleo-c031c6