#include <LiquidCrystal_I2C.h>
#define TRIG 12
#define ECHO 13
#define I2C_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_LINES 2
int bot = 23;
bool Lig = false;
int Nivel1 = 16;
int Nivel2 = 17;
int Nivel3 = 5;
int aber = 4;
int fech = 0;
int bomb = 2;
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
void setup() {
Serial.begin(115200);
analogReadResolution(10);
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(Nivel1, OUTPUT);
pinMode(Nivel2, OUTPUT);
pinMode(Nivel3, OUTPUT);
pinMode(aber, OUTPUT);
pinMode(fech, OUTPUT);
pinMode(bomb, OUTPUT);
pinMode(bot, INPUT);
lcd.init();
lcd.backlight();
}
void loop() {
lcd.clear();
digitalWrite(TRIG, 1);
delayMicroseconds(10);
digitalWrite(TRIG, 0);
int duration = pulseIn(ECHO, 1);
int distCM = duration/58;
int quant = distCM;
quant = map(quant, 200, 0, 0, 200);
Serial.print(distCM);
Serial.println("cm");
if(quant <= 20){
lcd.setCursor(0, 1);
lcd.print("Critico");
digitalWrite(Nivel1, HIGH);
digitalWrite(Nivel2, LOW);
digitalWrite(Nivel3, LOW);
}
else if(quant > 20 && quant <= 40){
lcd.setCursor(0, 1);
lcd.print("Alerta");
digitalWrite(Nivel1, LOW);
digitalWrite(Nivel2, HIGH);
digitalWrite(Nivel3, LOW);
}
else if(quant > 40){
lcd.setCursor(0, 1);
lcd.print("Normal");
digitalWrite(Nivel1, LOW);
digitalWrite(Nivel2, LOW);
digitalWrite(Nivel3, HIGH);
}
int botValue = digitalRead(bot);
if(botValue == true){
Lig = !Lig;
while(botValue == 1){
botValue = digitalRead(bot);
}
}
if(quant >= 198){
digitalWrite(fech, HIGH);
digitalWrite(aber, LOW);
}
else{
digitalWrite(aber, HIGH);
digitalWrite(fech, LOW);
}
if(Lig == true && quant > 20){
digitalWrite(bomb, HIGH);
delay(200);
digitalWrite(bomb, LOW);
delay(200);
}
lcd.setCursor(0, 0);
lcd.print("Nivel:");
lcd.setCursor(7, 0);
lcd.print(quant);
lcd.setCursor(10, 0);
lcd.print("L");
delay(500);
}