#define PIN_SLIDE_SWITCH 33
#define PIN_LED_AZUL 2
#define PIN_LED_ROJO 5
volatile bool estadoLlave = LOW;
volatile bool estadoLed = LOW;
// Todos los tiempos se miden en milisegundos
unsigned long tiempoPresionado = 0;
unsigned long tiempoLiberado = 0;
unsigned long temporizador = 0;
unsigned long tiempoAnterior = 0;
const int parpadeo = 500;
bool estadoAnteriorLedAzul = HIGH;
void setup() {
Serial.begin(9600);
pinMode(PIN_SLIDE_SWITCH, INPUT_PULLUP);
pinMode(PIN_LED_ROJO, OUTPUT);
pinMode(PIN_LED_AZUL, OUTPUT);
digitalWrite(PIN_LED_ROJO, estadoLed);
digitalWrite(PIN_LED_AZUL, estadoLlave);
}
void loop() {
// millis() devuelve el tiempo transcurrido desde que el microcontrolador comenzó a ejecutar el programa, en milisegundos
temporizador = millis();
// LED ROJO: Encender y apagar
if (temporizador - tiempoAnterior > parpadeo) {
estadoLed = !estadoLed;
digitalWrite(PIN_LED_ROJO, estadoLed);
tiempoAnterior = temporizador;
}
// LED AZUL: Encender con switch
estadoLlave = digitalRead(PIN_SLIDE_SWITCH);
digitalWrite(PIN_LED_AZUL, estadoLlave);
if (estadoLlave == LOW && estadoAnteriorLedAzul == HIGH) // Presionado
{
Serial.print("Azul Activado durante: ");
tiempoPresionado = millis();
estadoAnteriorLedAzul = estadoLlave;
}
if (estadoLlave == HIGH && estadoAnteriorLedAzul == LOW) // Liberado
{
tiempoLiberado = millis();
if (tiempoLiberado > tiempoPresionado ) {
Serial.println(int((tiempoLiberado - tiempoPresionado) / 1000));
}
estadoAnteriorLedAzul = estadoLlave;
}
delay(10);
}