Este ejemplo cuenta el número de agitaciones que se dan para encender o apagar los NeoPixels. Además de agitaciones, podría ser cualquier otro evento como: palmadas, pulsaciones de botón, flashes de luz, etc. En adelante me referiré a ellos como “agitaciones” o “eventos” indistintamente.

Lo difícil de este problema es determinar si los dos eventos (agitaciones) se han producido seguidas.

Para ello utiliza el bloque “millis (ms)” que nos da el tiempo transcurrido en milisegundos desde que se inició el programa. Utilizando una variable para guardar el tiempo en el que se produjo el último evento, podemos medir cuánto ha pasado desde entonces y determinar si las dos agitaciones han pasado seguidas o son independientes.

Se comienza con un contador de eventos a 0. Al producirse un evento se incrementa este contador a 1 y se guarda el tiempo en el que se produce. Si no fuera el primero, se incrementa la variable a 2 o a tanto como corresponda.

Por otra parte, se está comprobando continuamente cuánto tiempo ha pasado desde el último evento. Cuando pasan más de 700ms, se procede a comprobar cuántos eventos se han contado en ese tiempo. Si es 1 se apagan todos los NeoPixels y se reproduce un sonido de apagado. Si es 2 se encienden todos los NeoPixels y se produce un sonido de encendido. Después de esto se reestablece el contador a 0.

Deja un comentario