#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2);
// HC-SR04
const int trigPin = 9;
const int echoPin = 10;
// LED e buzzer
const int ledVermelho = 6;
const int ledVerde = 7;
const int buzzer = 5;
// Altura total do sensor (em cm)
const float alturaSensor = 300.0;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledVermelho, OUTPUT);
pinMode(ledVerde, OUTPUT);
pinMode(buzzer, OUTPUT);
lcd.init();
lcd.backlight();
Serial.begin(9600);
}
void loop() {
// Medição do HC-SR04
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duracao = pulseIn(echoPin, HIGH);
float distancia = duracao * 0.034 / 2.0;
float alturaRio = alturaSensor - distancia;
// LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Altura: ");
lcd.print(alturaRio, 1);
lcd.print(" cm");
// Alerta se altura >= 200 cm
if (alturaRio >= 200) {
digitalWrite(ledVermelho, HIGH);
digitalWrite(ledVerde, LOW);
tone(buzzer, 1000); // 1000 Hz
lcd.setCursor(0, 1);
lcd.print("ALERTA: Cheia! ");
} else {
digitalWrite(ledVermelho, LOW);
digitalWrite(ledVerde, HIGH);
noTone(buzzer); // desliga buzzer
lcd.setCursor(0, 1);
lcd.print("Nivel normal ");
}
delay(1000);
}