#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Dirección I2C de la pantalla LCD, tamaño de 16x2
const int buttonPin = 2; // Pin donde está conectado el botón
const int buzzerPin = 3; // Pin donde está conectado el zumbador
const int ledGreen = 4; // Pin para el LED verde
const int ledRed = 5; // Pin para el LED rojo
void setup() {
Serial.begin(9600); // Iniciar la comunicación serial
pinMode(buttonPin, INPUT_PULLUP); // Configurar el pin del botón con resistencia pull-up interna
pinMode(buzzerPin, OUTPUT);
pinMode(ledGreen, OUTPUT);
pinMode(ledRed, OUTPUT);
lcd.begin(16, 2, LCD_5x8DOTS); // Inicializar la pantalla LCD con 16 columnas, 2 filas y tamaño de carácter 5x8 puntos
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Sistema Iniciado");
delay(2000);
lcd.clear();
}
void loop() {
static unsigned long lastDebounceTime = 0;
static bool lastButtonState = HIGH;
bool currentButtonState = digitalRead(buttonPin);
unsigned long debounceDelay = 50;
// Imprimir el estado actual del botón
Serial.print("Estado del botón: ");
Serial.println(currentButtonState);
if (currentButtonState != lastButtonState) {
lastDebounceTime = millis();
Serial.println("Cambio detectado en el estado del botón.");
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (currentButtonState == LOW) { // Botón presionado
Serial.println("Botón presionado. Activando alarma.");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Alerta! Terremoto");
digitalWrite(buzzerPin, HIGH);
digitalWrite(ledRed, HIGH);
digitalWrite(ledGreen, LOW);
} else {
Serial.println("Botón no presionado. Sistema en estado normal.");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sistema Normal ");
digitalWrite(buzzerPin, LOW);
digitalWrite(ledRed, LOW);
digitalWrite(ledGreen, HIGH);
}
}
lastButtonState = currentButtonState;
// Añadir un pequeño retraso para evitar sobrecargar la comunicación serial
delay(100);
}