// Definición de pines
const int botonPin = 2; // Pin del botón (entrada digital)
const int salidaPin = 13; // Pin de la salida (salida digital)
// Variables
bool estadoSalida = LOW; // Estado inicial de la salida (apagada)
int contadorPulsos = 0; // Contador de pulsos del botón
bool ultimoEstadoBoton = HIGH; // Estado anterior del botón
unsigned long tiempoUltimoCambio = 0; // Tiempo del último cambio de estado del botón
const unsigned long debounceDelay = 50; // Tiempo de espera para el debouncing (en milisegundos)
void setup() {
pinMode(botonPin, INPUT_PULLUP); // Configurar el pin del botón como entrada con pull-up interno
pinMode(salidaPin, OUTPUT); // Configurar el pin de salida como salida digital
}
void loop() {
// Leer el estado actual del botón
bool estadoBoton = digitalRead(botonPin);
// Verificar si el estado del botón ha cambiado y ha pasado el tiempo de debouncing
if (estadoBoton != ultimoEstadoBoton && millis() - tiempoUltimoCambio > debounceDelay) {
tiempoUltimoCambio = millis(); // Actualizar el tiempo del último cambio
ultimoEstadoBoton = estadoBoton; // Actualizar el estado del botón
// Si el botón pasa de alto a bajo (presionado), incrementar el contador de pulsos
if (estadoBoton == LOW) {
contadorPulsos++;
}
}
// Si se han presionado tres veces el botón, cambiar el estado de la salida
if (contadorPulsos >= 3) {
estadoSalida = !estadoSalida; // Cambiar el estado de la salida
digitalWrite(salidaPin, estadoSalida); // Actualizar el estado de la salida
contadorPulsos = 0; // Reiniciar el contador de pulsos
}
}