#include <LiquidCrystal_I2C.h>
#define PIN_TRIG 26
#define PIN_ECHO 25
#define LOWLED 18
#define MIDLED 19
#define HIGHLED 23
#define MOTOR 27
unsigned int level = 0;
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
pinMode(LOWLED, OUTPUT);
pinMode(MIDLED, OUTPUT);
pinMode(HIGHLED, OUTPUT);
pinMode(MOTOR, OUTPUT);
digitalWrite(LOWLED, HIGH);
digitalWrite(MIDLED, HIGH);
digitalWrite(HIGHLED, HIGH);
digitalWrite(MOTOR, LOW);
Serial.begin(115200);
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("WATER TANK LEVEL");
}
void loop() {
//start a new measurement:
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
//Read the result:
int duration = pulseIn(PIN_ECHO, HIGH);
Serial.print("Distance in CM: ");
Serial.println(duration / 58);
Serial.print("Distance in inches: ");
Serial.println(duration / 148);
level = duration / 58;
lcd.setCursor(0, 1);
if(level < 55)
{
digitalWrite(MOTOR, LOW);
lcd.print("FULL ");
}
else if ((level >= 50) && (level < 120))
{
digitalWrite(LOWLED, LOW);
digitalWrite(MIDLED, LOW);
digitalWrite(HIGHLED, LOW);
lcd.print("HIGH ");
}
else if ((level >= 120) && (level < 190))
{
digitalWrite(LOWLED, LOW);
digitalWrite(MIDLED, LOW);
digitalWrite(HIGHLED, HIGH);
lcd.print("MED-HIGH ");
}
else if ((level >= 190) && (level<260))
{
digitalWrite(LOWLED, LOW);
digitalWrite(MIDLED, LOW);
digitalWrite(HIGHLED, HIGH);
lcd.print("MEDIUM ");
}
else if ((level >= 260) && (level<330))
{
digitalWrite(LOWLED, LOW);
digitalWrite(MIDLED, HIGH);
digitalWrite(HIGHLED, HIGH);
lcd.print("Low ");
}
else if ((level >= 330) && (level<400))
{
digitalWrite(LOWLED, HIGH);
digitalWrite(MIDLED, HIGH);
digitalWrite(HIGHLED, HIGH);
digitalWrite(MOTOR, HIGH);
lcd.print("Very Low ");
}
else if (level >= 400 ) {
lcd.print("Empty ");
}
delay(1000);
}