I have a program for a soil moisture sensor to find a plant's moisture level and when I put it into the plant, the LCD still shows the screen as if it had 0 water, even when I water the plant as the monitor is in the plant. Here is my code:
// C++ code
//
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd_1(0x27, 16, 2); // Set the LCD address and dimensions (16x2)
int moisture = 0;
void setup()
{
pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
Serial.begin(9600);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
lcd_1.init(); // Initialize the LCD
}
void loop()
{
// Apply power to the soil moisture sensor
digitalWrite(A0, HIGH);
delay(10); // Wait for 10 millisecond(s)
moisture = digitalRead(A1);
// Turn off the sensor to reduce metal corrosion
// over time
digitalWrite(A0, LOW);
Serial.println(moisture);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
if (moisture < 200) {
digitalWrite(12, HIGH);
} else {
if (moisture < 400) {
digitalWrite(11, HIGH);
} else {
if (moisture < 600) {
digitalWrite(10, HIGH);
} else {
if (moisture < 800) {
digitalWrite(9, HIGH);
} else {
digitalWrite(8, HIGH);
}
}
}
}
delay(100); // Wait for 100 millisecond(s)
if (moisture <= 720 && (moisture >= 170 && moisture > 170)) {
lcd_1.print("I am happy!");
delay(3000); // Wait for 3000 millisecond(s)
lcd_1.clear();
lcd_1.print("Thank you!");
delay(3000); // Wait for 3000 millisecond(s)
lcd_1.clear();
} else {
if (moisture >= 720) {
lcd_1.print("I am sad. ");
delay(3000); // Wait for 3000 millisecond(s)
lcd_1.clear();
lcd_1.print("Too much water!");
delay(3000); // Wait for 3000 millisecond(s)
lcd_1.clear();
} else {
if (moisture <= 170) {
lcd_1.print("I am sad. ");
delay(3000); // Wait for 3000 millisecond(s)
lcd_1.clear();
lcd_1.print("I need water!");
delay(3000); // Wait for 3000 millisecond(s)
lcd_1.clear();
} else {
}
}
}
}
Thanks