#define INDICATOR_PIN 12 // Pin donde está conectado el LED indicador
#define LED_PIN 13 // Pin donde está conectado el LED que parpadea
#define BUTTON_ACTIVATE_PIN 8 // Pin para activar/desactivar el sistema (LED indicador)
#define BUTTON_START_PIN 2 // Pin para iniciar el parpadeo
#define BUZZER_PIN 10 // Pin donde está conectado el buzzer
bool indicatorState = false; // Estado del LED indicador
bool startActive = false; // Estado del parpadeo
bool buttonPressed = false; // Estado del botón de activación
unsigned long startMillis = 0; // Tiempo de inicio del parpadeo
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(INDICATOR_PIN, OUTPUT); // Configura el LED indicador como salida
pinMode(BUTTON_ACTIVATE_PIN, INPUT_PULLUP); // Configura el botón de activación con pull-up interno
pinMode(BUTTON_START_PIN, INPUT_PULLUP); // Configura el botón de inicio con pull-up interno
pinMode(BUZZER_PIN, OUTPUT); // Configura el buzzer como salida
}
void loop() {
// Comprueba si se presiona el botón de activación
if (digitalRead(BUTTON_ACTIVATE_PIN) == LOW && !buttonPressed) {
// Cambia el estado del LED indicador
indicatorState = !indicatorState;
digitalWrite(INDICATOR_PIN, indicatorState ? HIGH : LOW);
buttonPressed = true; // Marcar que el botón ha sido presionado
} else if (digitalRead(BUTTON_ACTIVATE_PIN) == HIGH) {
buttonPressed = false; // Reiniciar el estado del botón cuando no está presionado
}
// Comprueba si se presiona el botón de inicio
if (digitalRead(BUTTON_START_PIN) == LOW && indicatorState) {
if (!startActive) { // Solo iniciar si no está ya activo
startActive = true; // Marcar que el parpadeo está activo
startMillis = millis(); // Guardar el tiempo de inicio
// Espera a que se suelte el botón para evitar múltiples activaciones
while (digitalRead(BUTTON_START_PIN) == LOW);
}
}
// Si el parpadeo está activo y el LED indicador está encendido
if (startActive && indicatorState) {
unsigned long currentMillis = millis();
// Si han pasado menos de 5 segundos, hacer parpadear el LED y el buzzer
if (currentMillis - startMillis < 5000) {
// Cambia el estado del LED y del buzzer cada 250 ms
if (currentMillis % 500 < 250) {
digitalWrite(LED_PIN, HIGH); // Encender el LED que parpadea
digitalWrite(BUZZER_PIN, HIGH); // Encender el buzzer
} else {
digitalWrite(LED_PIN, LOW); // Apagar el LED que parpadea
digitalWrite(BUZZER_PIN, LOW); // Apagar el buzzer
}
} else {
// Después de 5 segundos, encender el LED y el buzzer permanentemente
digitalWrite(LED_PIN, HIGH); // Mantener el LED encendido
digitalWrite(BUZZER_PIN, HIGH); // Mantener el buzzer encendido
startActive = false; // Resetear el estado para permitir reinicio
}
}
// Asegúrate de que el LED y el buzzer estén apagados cuando el sistema no está activado
if (!indicatorState) {
digitalWrite(LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
}
}