Paso 4: El Software en detalle parte 2
Ahora para el bucle de. Voy a descomponerlo poco a poco, para explicar lo que está sucediendo. Lo primero que hará el programa es leer el estado del botón. Esto nos dará el código a continuación y y nos permiten crear funciones para Estados no presionados y presionados, recordar que la función de pulsación corta pasa al soltar botón.
if (digitalRead(button) == HIGH) { //Button pressed } else { //Button not pressed }
En el botón sección, lo primero que vamos a hacer es probar el buttonActive variable, al montaje, esto es falso. Si esto es falso actualmente, esto significa que el programa detecta la tecla por primera vez. Esto es porque después de la lectura falso que inmediatamente ponemos a true y sólo soltando el botón puede establecer a false. También registramos el tiempo que primero se presionó el botón.
if (buttonActive == false) { buttonActive = true; buttonTimer = millis(); }
El siguiente paso dentro de la sección tecla, es prueba de cuánto hemos mantenido el botón para. Hacemos esto analizando el momento actual, restando la primera pulsación en milisegundos y compara eso con la cantidad de tiempo que desee hasta que se active la pulsación larga.
También comprobamos que el longPressActive booleana es falsa, porque una vez que hemos activado la función de pulsación larga fijaremos este valor booleano true stop repetir activación. Una vez hemos mantenido el botón el tiempo deseado, moverá de un tirón el estado de los boolean LED1State que a su vez moverá de un tirón el pin que el LED está conectado a alta o baja en consecuencia.
if ((millis() - buttonTimer > longPressTime) && (longPressActive == false)) { longPressActive = true; LED1State = !LED1State; digitalWrite(LED1, LED1State); }
Mudanza en el botón no pulsado sección del código. Lo primero vamos a comprobar es si el buttonActive booleano es true. Si se establece en true, el código es bucle por primera vez desde que se suelta el botón. Será entonces conjunto nuevo boolean a false para permitir que el código anterior para detectar el botón se presiona otra vez.
if (buttonActive == true) { buttonActive = false; }
En el if anterior declaración, como estamos detectando el primer bucle después de soltar el botón, a continuación vamos a comprobar si la función pulsación larga fue activada, que dará dos pasos posibles. Si se activó la pulsación larga simplemente estableceremos la longPressActive a false para permitir que el programa a largo Pulse de nuevo. Si no se activa, se tapa el estado de lo LED de segunda como lo hicimos con el primero.
if (longPressActive == true) { longPressActive = false; } else { LED2State = !LED2State; digitalWrite(LED2, LED2State); }