#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int SENSOR_LOW = 25;
const int SENSOR_MID = 26;
const int SENSOR_FULL = 27;
const int LED_UNDERFLOW = 2;
const int LED_NORMAL = 4;
const int LED_OVERFLOW = 5;
void setup() {
Serial.begin(115200);
pinMode(SENSOR_LOW, INPUT_PULLUP);
pinMode(SENSOR_MID, INPUT_PULLUP);
pinMode(SENSOR_FULL, INPUT_PULLUP);
pinMode(LED_UNDERFLOW, OUTPUT);
pinMode(LED_NORMAL, OUTPUT);
pinMode(LED_OVERFLOW, OUTPUT);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Water Level");
lcd.setCursor(0,1);
lcd.print("System Ready");
delay(1500);
}
void loop() {
bool low = !digitalRead(SENSOR_LOW);
bool mid = !digitalRead(SENSOR_MID);
bool full = !digitalRead(SENSOR_FULL);
digitalWrite(LED_UNDERFLOW, LOW);
digitalWrite(LED_NORMAL, LOW);
digitalWrite(LED_OVERFLOW, LOW);
lcd.clear();
if (full && mid && low) {
digitalWrite(LED_OVERFLOW, HIGH);
lcd.setCursor(0,0);
lcd.print("Status:");
lcd.setCursor(0,1);
lcd.print("OVERFLOW");
}
else if (low || mid) {
digitalWrite(LED_NORMAL, HIGH);
lcd.setCursor(0,0);
lcd.print("Status:");
lcd.setCursor(0,1);
lcd.print("NORMAL LEVEL");
}
else {
digitalWrite(LED_UNDERFLOW, HIGH);
lcd.setCursor(0,0);
lcd.print("Status:");
lcd.setCursor(0,1);
lcd.print("UNDERFLOW");
}
delay(300);
}