#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define PINO_TRIG 18
#define PINO_ECHO 19
#define BOTAO_AUMENTAR 4
#define BOTAO_DIMINUIR 16
#define BOTAO_SELECIONAR 17
#define PINO_ALARME 15
long duracao;
int distancia;
int valorLimite = 0;
void setup() {
lcd.init();
lcd.backlight();
pinMode(PINO_TRIG, OUTPUT);
pinMode(PINO_ECHO, INPUT);
pinMode(BOTAO_AUMENTAR, INPUT);
pinMode(BOTAO_DIMINUIR, INPUT);
pinMode(BOTAO_SELECIONAR, INPUT);
pinMode(PINO_ALARME, OUTPUT);
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("Limite: ");
lcd.print(valorLimite);
}
void loop() {
digitalWrite(PINO_TRIG, 0);
delayMicroseconds(2);
digitalWrite(PINO_TRIG, 1);
delayMicroseconds(10);
digitalWrite(PINO_TRIG, 0);
duracao = pulseIn(PINO_ECHO, 1);
distancia = duracao * 0.034 / 2;
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print(distancia);
if (digitalRead(BOTAO_AUMENTAR) == 0) {
valorLimite += 1;
delay(100);
}
if (digitalRead(BOTAO_DIMINUIR) == 0 && valorLimite > 0) {
valorLimite -= 1;
delay(100);
}
if (digitalRead(BOTAO_SELECIONAR) == 0) {
lcd.setCursor(8, 1);
lcd.print(" ");
lcd.setCursor(8, 1);
lcd.print(valorLimite);
delay(100);
}
if (distancia < valorLimite) {
digitalWrite(PINO_ALARME, 1);
} else {
digitalWrite(PINO_ALARME, 0);
}
}