#include <LiquidCrystal_I2C.h>
#define echoPin 7
#define trigPin 6
#define pinR 11
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
void setup() {
pinMode(pinR, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
lcd.begin(16, 2);
}
void loop() {
int distance = calDistance();
// Check the distance and display a message accordingly
if(distance > 40 ){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Refill Now!");
lcd.setCursor(0, 1);
lcd.print("Distance: is MAX ");
digitalWrite(pinR, HIGH);
}else if (distance > 20 && distance <40) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Almost Empty");
lcd.setCursor(0, 1);
lcd.print("Distance: ");
lcd.print(distance);
lcd.print("cm");
}else if (distance > 5 && distance <20 ) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Half Full");
lcd.setCursor(0, 1);
lcd.print("Distance: ");
lcd.print(distance);
lcd.print("cm");
} else if (distance <5 ) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Full");
lcd.setCursor(0, 1);
lcd.print("Distance: ");
lcd.print(distance);
lcd.print("cm");
} else{
lcd.clear();
lcd.setCursor(5,0);
lcd.print("Smart ");
lcd.setCursor(2,1);
lcd.print("Water bottle");
}
digitalWrite(pinR, LOW);
delay(100);
}
// calculate the distance form the 1st surface
int calDistance (){
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
double dist = duration * 0.034 / 2;
int distance = (int)dist;
return distance ;
}