Cómo ejecutar el bucle principal para su proyecto Arduino del sistema de entrada del teclado

Necesitará ejecutar un ciclo principal para su proyecto Arduino del sistema de entrada del teclado. Hay solo algunas cosas que hace el código para operar su sistema de entrada. El bucle principal funciona de la siguiente manera:

  1. Escuche la clave.

  2. Si se presionó una tecla, envíela a la pantalla LED.

  3. Incrementar el número de pulsaciones de teclas en uno.

  4. Introdúzcalo en el búfer de códigos en la siguiente posición disponible.

  5. Determine si se han introducido cuatro dígitos.

    Si es así, compruebe si el código es válido.

  6. Si el código es válido, abra la puerta y reinicie todo para la próxima vez.

Lo principal que debe hacer es verificar si se ha presionado una tecla. La primera declaración crea una variable char local llamada key para almacenar el carácter que se envía desde una función llamada getKey () . ¿Recuerdas el keyMap ? De ahí viene este número en última instancia.

El valor char de key también se asigna a la matriz codeBuffer [] , que se usa para probar si el código es válido. Se agrega a la posición almacenada por keypressCount , que se incrementa hacia arriba cada vez que se detecta un nuevo carácter. El carácter “cero” es la primera pulsación de tecla detectada. Entonces codeBuffer [0] contiene la primera tecla presionada en el teclado, codeBuffer [1] contiene la segunda tecla presionada, y así sucesivamente.

La siguiente instrucción if condicional se ejecuta solo cuando se ha presionado una tecla, momento en el que se procesan los Pasos 2 a 6 de la lista anterior. Si no se ha presionado una tecla, el programa simplemente espera a que eso suceda. Cuando lo hace, la función sendCommand ejecuta:

sendCommand (keypressCount + 1, tecla);

El sendCommand toma dos parámetros: que de siete segmentos número de módulo al cambio, y lo que para cambiarlo a. Utiliza keypressCount no solo para realizar un seguimiento del número de veces que se presionaron teclas hasta ahora, sino también para saber qué dígito de siete segmentos se iluminará.

LEER  Cómo crear un prototipo de un teclado y una pantalla para su proyecto Arduino de sistema de entrada con teclado

Sin embargo, keypressCount comienza en cero porque el código [] las matrices de caracteres búfer [] comienzan su numeración en cero, y desea almacenar esos valores en el lugar correcto. Pero el chip Max comienza a numerar dígitos desde 1. Por lo tanto, para usar keypressCount para iluminar el dígito correcto de siete segmentos, debe agregar uno ( +1 ) a su valor.

La siguiente declaración implementa esa práctica función de depuración. Si ha establecido el valor booleano DEBUG en verdadero , el código imprimirá todas sus variables en el puerto serie.

A continuación, incrementa el keypressCount en uno y luego prueba para ver si se presionaron cuatro dígitos. Si es así, es hora del espectáculo. La declaración de demora (500) le da medio segundo para ver el último dígito del código de acceso ingresado porque la pantalla cambiará dependiendo de si se ingresó el código de acceso correcto. Esta prueba se realiza con un poco de código en lenguaje C nativo:

if (memcmp (codeBuffer, código, 4) == 0) {
  if (DEPURACIÓN) {Serial.println ("¡COINCIDIR!");}
  desbloquear();
  }

La función memcmp () compara dos elementos en la memoria y toma como parámetros los dos elementos y sus longitudes esperadas. En este caso, está comparando la matriz codeBuffer y el código almacenado al comienzo del programa. Ambos tienen una longitud de cuatro bytes.

Si son exactamente iguales, la función memcmp () devuelve un cero y eso es exactamente lo que está buscando en la declaración condicional. Si son iguales (y DEBUG es verdadero), “¡COINCIDIR!” se imprime en el puerto serie y se ejecuta la función de desbloqueo () . Si la comparación de memoria falla, la función no devuelve un “0”, lo que significa que se ingresó el código incorrecto.

LEER  Cómo controlar la velocidad de un motor de CC con Arduino

En cualquier caso, desea borrar la pantalla, lista para la próxima vez. Entonces llamas a la función clearDisplay () . Otra instrucción en lengua C nativa hace un poco de limpieza de la memoria:

memset (codeBuffer, 0, 4);

Esto borra el codeBuffer explícitamente configurándolo en 0. Su longitud es 4, que es el segundo parámetro. Algunos podrían argumentar que esta instrucción no es necesaria, pero es una buena práctica administrar explícitamente la memoria en lugar de dejar las cosas al azar.

Por último, debido a que esta fue la cuarta pulsación de tecla y solo hay cuatro dígitos para evaluar, keypressCount debe restablecerse a cero para que esté listo para la siguiente iteración.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *