#include <LiquidCrystal_I2C.h>
#define I2C_ADD 0X27
#define LCD_COL 16
#define LCD_ROW 2
#define RED 18
#define count 10
#define POT 34
#define TRIG 5
#define ECHO 16
#define RED 13
#define YELLOW 4
#define GREEN 16
LiquidCrystal_I2C lcd(I2C_ADD,LCD_COL,LCD_ROW);
const int pin[] ={18,19,17,14,23,32,33,27,26,25};
void setup() {
// put your setup code here, to run once:
// Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.print("Water measure!!");
int i=0;
while(i<count){
pinMode(pin[i],OUTPUT);
i++;
}
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(RED, OUTPUT);
pinMode(YELLOW, OUTPUT);
pinMode(GREEN, OUTPUT);
}
void loop() {
int dis = readDis();
disp(dis);
int level = map(dis,0,400,0,count);
// Serial.println(level);
int i =0;
while(i<count){
if(i<level){
digitalWrite(pin[i],HIGH);
}else{
digitalWrite(pin[i],LOW);
}
i++;
}
}
int readDis(){
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG,HIGH);
delayMicroseconds(10);
digitalWrite(TRIG,LOW);
int duration = pulseIn(ECHO,HIGH);
int distance = duration *0.034 / 2;
// Serial.println(distance);
return distance;
}
void disp(int dist){
// lcd.setCursor(0,0);
// lcd.print("Water distance:");
// lcd.setCursor(0,1);
// lcd.print(String(dist) + " cm");
if(dist>350){
highLevel();
}else if(dist<350 && dist>150){
midLevel();
}else{
lowLevel();
}
}
void lowLevel(){
lcd.setCursor(0,0);
lcd.print("Low Level ");
lcd.setCursor(0,1);
lcd.print("Less than 10% ");
digitalWrite(RED, HIGH);
digitalWrite(YELLOW, LOW);
digitalWrite(GREEN, LOW);
}
void midLevel(){
lcd.setCursor(0,0);
lcd.print("Mid Level ");
lcd.setCursor(0,1);
lcd.print("It's about 50% ");
digitalWrite(RED, LOW);
digitalWrite(YELLOW, HIGH);
digitalWrite(GREEN, LOW);
}
void highLevel(){
lcd.setCursor(0,0);
lcd.print("High Level ");
lcd.setCursor(0,1);
lcd.print("Almost Full ");
digitalWrite(RED, LOW);
digitalWrite(YELLOW, LOW);
digitalWrite(GREEN, HIGH);
}