// Definir los pines para el botón y el LED
const int buttonPin = 2;
const int ledPin = 3;
int buttonState = HIGH; // Estado actual del botón
int lastButtonState = HIGH; // Estado anterior del botón
unsigned long lastDebounceTime = 0; // Última vez que se cambió el estado del botón
unsigned long debounceDelay = 50; // Tiempo de rebote
int pressCount = 0; // Contador de pulsaciones
unsigned long firstPressTime = 0; // Tiempo de la primera pulsación
unsigned long pressInterval = 500; // Intervalo máximo entre pulsaciones para contar como doble clic
void setup() {
// Iniciar la comunicación serial
Serial.begin(9600);
// Configurar los pines del botón y del LED
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
// Apagar el LED al inicio
digitalWrite(ledPin, LOW);
}
void loop() {
// Leer el estado del botón
int reading = digitalRead(buttonPin);
// Comprobar si el botón ha cambiado de estado (debouncing)
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
// Si el botón está presionado
if (buttonState == LOW) {
pressCount++;
// Si es la primera pulsación
if (pressCount == 1) {
firstPressTime = millis();
}
}
}
}
// Comprobar el tiempo desde la primera pulsación
if (pressCount > 0 && (millis() - firstPressTime) > pressInterval) {
if (pressCount == 1) {
Serial.println("A");
digitalWrite(ledPin, HIGH); // Enciende el LED
} else if (pressCount == 2) {
Serial.println("B");
digitalWrite(ledPin, HIGH); // Enciende el LED
}
pressCount = 0;
}
// Apagar el LED después de un tiempo para indicar la acción completada
if (digitalRead(ledPin) == HIGH && (millis() - firstPressTime) > 1000) {
digitalWrite(ledPin, LOW);
}
// Guardar el estado del botón para la próxima lectura
lastButtonState = reading;
}