// Libraries
#include <DHT.h>;
#include <LiquidCrystal.h>
// Constants
#define DHTPIN 13 // what pin we're connected to
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE); // Initialize DHT sensor for normal 16MHz Arduino
// Variables
float currentHum = 0.00, dhtBefore = 0.00, afterWatering = 0.00; // Stores humidity value
int x = 0; // Looping round
int red = 4, green = 2, blue = 3, slider = 6, sliderBefore;
bool humIncrease, humDecrease = true, looping = true;
// LCD pins
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
void setup() {
Serial.begin(9600);
dht.begin();
pinMode(blue, OUTPUT);
pinMode(green, OUTPUT);
pinMode(red, OUTPUT);
pinMode(slider, INPUT_PULLUP);
lcd.begin(16, 2); // Initialize 16x2 LCD
lcd.print("Initializing...");
delay(2000); // Pause to display a message
lcd.clear();
}
void loop() {
sliderBefore = digitalRead(slider);
// Read DHT sensor values before or after watering----------------------------
if (x == 0 || dhtBefore != dht.readHumidity()) {
currentHum = dht.readHumidity();
afterWatering = currentHum;
dhtBefore = currentHum;
} else { // Do not read DHT sensor after watering
currentHum = afterWatering;
}
// Display humidity and level--------------------------------------------------
lcd.setCursor(0, 0);
lcd.print("Humidity: ");
lcd.print(currentHum);
lcd.print("% ");
lcd.setCursor(0, 1); // Move to the second line
if (currentHum < 20) {
lcd.print("Level: TOO DRY ");
digitalWrite(blue, LOW);
digitalWrite(green, LOW);
digitalWrite(red, HIGH);
} else if (currentHum < 30) {
lcd.print("Level: DRY ");
digitalWrite(blue, LOW);
digitalWrite(green, LOW);
digitalWrite(red, HIGH);
} else if (currentHum <= 60) {
lcd.print("Level: NORMAL ");
digitalWrite(blue, LOW);
digitalWrite(green, HIGH);
digitalWrite(red, LOW);
} else if (currentHum < 70) {
lcd.print("Level: OVERMOIST ");
digitalWrite(blue, HIGH);
digitalWrite(green, LOW);
digitalWrite(red, LOW);
} else {
lcd.print("Level: TOO MOIST ");
digitalWrite(blue, HIGH);
digitalWrite(green, LOW);
digitalWrite(red, LOW);
}
// Watering sequence--------------------------------------------------------
if (sliderBefore != digitalRead(slider)) {
humIncrease = true;
} else {
humIncrease = false;
}
//WATERING PART-------------------------------------------------------------
if (humIncrease) {
while (humIncrease) {
// LED light when watering
if (afterWatering < 30) {
digitalWrite(blue, LOW);
digitalWrite(green, LOW);
digitalWrite(red, HIGH);
} else if (afterWatering < 60) {
digitalWrite(blue, LOW);
digitalWrite(green, HIGH);
digitalWrite(red, LOW);
} else {
digitalWrite(blue, HIGH);
digitalWrite(green, LOW);
digitalWrite(red, LOW);
}
lcd.setCursor(0, 0);
lcd.print("Humidity: ");
lcd.print(afterWatering);
lcd.print("% ");
lcd.setCursor(0, 1);
lcd.print("Watering...");
delay(800);
if (afterWatering >= 58 || sliderBefore == digitalRead(slider)) {
humIncrease = false;
afterWatering -= 2;
}
afterWatering += 2;
}
}
x++; // Counting loop------------------------------------------------------------
// Delay 2 seconds
}