#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define TRIG_PIN 18 // ESP32 pin GIOP23 connected to Ultrasonic Sensor's TRIG pin
#define ECHO_PIN 5 // ESP32 pin GIOP22 connected to Ultrasonic Sensor's ECHO pin
#define LED 2
#define LED2 4
float duration_us, distance_cm;
void setup() {
// begin serial port
Serial.begin (9600);
lcd.init();
lcd.backlight();
// configure the trigger pin to output mode
pinMode(TRIG_PIN, OUTPUT);
// configure the echo pin to input mode
pinMode(ECHO_PIN, INPUT);
pinMode(LED, OUTPUT);
pinMode(LED2, OUTPUT);
lcd.setCursor(0, 0);
lcd.print(" Water Level ");
lcd.setCursor(0, 1);
lcd.print(" Indicator");
delay(2000);
lcd.clear();
}
void loop() {
// generate 10-microsecond pulse to TRIG pin
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// measure duration of pulse from ECHO pin
duration_us = pulseIn(ECHO_PIN, HIGH);
// calculate the distance
distance_cm = 0.017 * duration_us;
// ligt up led if distance under limit
if (distance_cm < 100) {
Blink(LED);
lcd.clear();
// digitalWrite(LED, HIGH);
lcd.setCursor(0, 0);
lcd.print("Water lvl:Low");
lcd.setCursor(0, 1);
lcd.print("Motor Status :OFF");
}else if(distance_cm > 300){
Blink(LED2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Water lvl:High ");
lcd.setCursor(0, 1);
lcd.print("Motor Status :ON");
}
else{//digitalWrite(LED, LOW);
lcd.clear();
//digitalWrite(LED, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Water lvl:Medium ");
lcd.setCursor(0, 1);
lcd.print("Motor Status :OFF");
}
// print the value to Serial Monitor
Serial.print("distanceA: ");
Serial.print(distance_cm);
Serial.println(" cm ");
delay(500);
}
void Blink(int x){
digitalWrite(x, HIGH);
delay(10);
digitalWrite(x, LOW);
}