#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int moisturePin = A0;
const int pHPin = A1;
const int relayPin = 7;
const int ledOn = 8;
const int ledOff = 9;
const int buzzerPin = 10;
const int moistureThreshold = 400;
const float pHThreshold = 6.5;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
pinMode(relayPin, OUTPUT);
pinMode(ledOn, OUTPUT);
pinMode(ledOff, OUTPUT);
pinMode(buzzerPin, OUTPUT);
digitalWrite(relayPin, LOW);
digitalWrite(buzzerPin, LOW);
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Smart Garden");
lcd.setCursor(0, 1);
lcd.print("System Starting");
delay(2000);
}
void loop() {
int moistureLevel = analogRead(moisturePin);
float pHLevel = analogRead(pHPin) * (14.0 / 1023.0);
Serial.print("Moisture Level: ");
Serial.println(moistureLevel);
Serial.print("pH Level: ");
Serial.println(pHLevel);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Moisture: ");
lcd.print(moistureLevel);
lcd.setCursor(0, 1);
lcd.print("pH: ");
lcd.print(pHLevel);
if (moistureLevel < moistureThreshold || pHLevel < pHThreshold) {
digitalWrite(relayPin, HIGH);
digitalWrite(ledOn, HIGH);
digitalWrite(ledOff, LOW);
digitalWrite(buzzerPin, HIGH);
Serial.println("Watering...");
lcd.setCursor(0, 1);
lcd.print("Watering...");
} else {
digitalWrite(relayPin, LOW);
digitalWrite(ledOn, LOW);
digitalWrite(ledOff, HIGH);
digitalWrite(buzzerPin, LOW);
Serial.println("No watering needed.");
lcd.setCursor(0, 1);
lcd.print("No watering");
}
delay(2000);
}