#include <LiquidCrystal_I2C.h>
#define I2C_ADD 0X27
#define LCD_COLS 16
#define LCD_ROWS 2
#define TRIG_PIN 26
#define ECHO_PIN 25
#define BAR_PINS 10
#define YELLOW 17
#define GREEN 5
#define RED 18
LiquidCrystal_I2C lcd(I2C_ADD, LCD_COLS,LCD_ROWS);
long duration;
int distance;
int pins[] ={33,25,26,27,14,12,13,23,19,16};
void setup() {
Serial.begin(115200);
pinMode(TRIG_PIN,OUTPUT);
pinMode(YELLOW, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(RED, OUTPUT);
pinMode(ECHO_PIN, INPUT);
lcd.init();
lcd.backlight();
int i =0;
while(i<BAR_PINS){
pinMode(pins[i],OUTPUT);
i++;
}
// digitalWrite(RED,HIGH);
// delay(2000);
// digitalWrite(YELLOW,LOW);
}
void loop() {
digitalWrite(TRIG_PIN,LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN,HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN,LOW);
duration = pulseIn(ECHO_PIN,HIGH);
distance= duration*0.034/2;
Serial.print("Distance: ");
Serial.println(distance);
int ledLevel = map(distance,0,4096,0,BAR_PINS);
int thisLead=0;
while(thisLead<BAR_PINS){
if(thisLead<ledLevel){
digitalWrite(pins[thisLead],HIGH);
}else{
digitalWrite(pins[thisLead],LOW);
}
thisLead++;
}
if(distance <= 150){
highlevel();
}else if(distance > 150 && distance<=350){
midlevel();
}else{
lowlevel();
}
delay(1000);
}
void lowlevel(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Water is low ");
lcd.setCursor(0,1);
lcd.print("Distance :" + String(distance));
digitalWrite(YELLOW, HIGH);
digitalWrite(GREEN, LOW);
digitalWrite(RED, LOW);
}
void midlevel(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Water is medium");
lcd.setCursor(0,1);
lcd.print("Distance :" + String(distance));
digitalWrite(YELLOW, LOW);
digitalWrite(GREEN, HIGH);
digitalWrite(RED, LOW);
}
void highlevel(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Water almost full");
lcd.setCursor(0,1);
lcd.print("Distance :" + String(distance));
digitalWrite(YELLOW, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(RED, HIGH);
}