#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define TRIG 5
#define ECHO 7
#define LED 20
#define BUZZER 19
#define SDA_LCD 40
#define SCL_LCD 37
LiquidCrystal_I2C lcd(0x27, 16, 2);
float distancia;
void setup() {
Serial.begin(115200);
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(LED, OUTPUT);
pinMode(BUZZER, OUTPUT);
Wire.begin(SDA_LCD, SCL_LCD);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Alerta Inund.");
lcd.setCursor(0, 1);
lcd.print("Sistema listo");
delay(2000);
lcd.clear();
}
void loop() {
// Pulso ultrasónico
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
long duracion = pulseIn(ECHO, HIGH, 30000);
distancia = duracion * 0.034 / 2;
// Monitor serial
Serial.print("Distancia: ");
Serial.print(distancia);
Serial.println(" cm");
// LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Nivel agua:");
lcd.setCursor(0, 1);
// SIN LECTURA
if (distancia == 0) {
lcd.print("Sin lectura");
digitalWrite(LED, LOW);
noTone(BUZZER);
}
// SEGURO
else if (distancia > 250) {
lcd.print("SEGURO ");
lcd.print(distancia);
lcd.print("cm");
digitalWrite(LED, LOW);
noTone(BUZZER);
}
// ALERTA
else if (distancia > 100 && distancia <= 250) {
lcd.print("ALERTA ");
lcd.print(distancia);
lcd.print("cm");
// Solo LED
digitalWrite(LED, HIGH);
// Sin buzzer
noTone(BUZZER);
}
// PELIGRO
else if (distancia <= 100) {
lcd.print("PELIGRO ");
lcd.print(distancia);
lcd.print("cm");
digitalWrite(LED, HIGH);
// Buzzer solo aquí
tone(BUZZER, 1500);
delay(500);
noTone(BUZZER);
}
delay(500);
}