- Ordenadores
- Arduino
- Cómo ejecutar el lazo principal para su proyecto Arduino de Keypad Entry System
Libro Relacionado
Por Brock Craft
Necesitarás ejecutar un bucle principal para tu proyecto Arduino de sistema de entrada de teclado. Hay solamente algunas cosas que el código hace para operar su sistema de entrada. El lazo principal funciona de la siguiente manera:
- Escuche si hay una llave.
- Si se ha pulsado una tecla, envíela a la pantalla LED.
- Aumentar en uno el número de pulsaciones de teclas.
- Introdúzcalo en el búfer de código en la siguiente posición disponible.
- Determine si se han introducido cuatro dígitos y, en caso afirmativo, verifique si el código es válido.
- Si el código es válido, abra la puerta y reinicie todo para la próxima vez.
Lo más importante es comprobar si se ha pulsado una tecla. La primera sentencia crea una variable de carácter local llamada key para almacenar el carácter que se devuelve desde una función llamada getKey(). ¿Recuerdas el keyMap? De ahí es de donde viene este número.
El valor del carácter de la clave también se asigna a la matriz codeBuffer[], que se utiliza para comprobar si el código es válido. Se añade a la posición almacenada mediante la teclaCount, que se incrementa hacia arriba cada vez que se detecta un nuevo carácter. El carácter «zero-th» es la primera pulsación de tecla detectada. Así, codeBuffer[0] contiene la primera tecla pulsada en el teclado, codeBuffer[1] contiene la segunda tecla pulsada, y así sucesivamente.
El siguiente condicional si la sentencia se ejecuta sólo cuando se ha pulsado una tecla, en cuyo momento se procesan los pasos 2 a 6 de la lista anterior. Si no se ha pulsado ninguna tecla, el programa sólo espera a que eso suceda. Cuando lo hace, se ejecuta la función sendCommand:
sendCommand(teclaCount+1, tecla);
El sendCommand tiene dos parámetros: el número de módulo de siete segmentos que se debe cambiar y el número al que se debe cambiar. Utilice keypressCount no sólo para llevar un registro del número de veces que se han pulsado las teclas hasta ahora, sino también para indicar qué dígitos de siete segmentos se deben iluminar.
Sin embargo, el keypressCount comienza en cero porque el código[] el buffer[] de las matrices de caracteres comienza su numeración en cero, y usted desea almacenar esos valores en el lugar correcto. Pero el chip Max comienza a numerar los dígitos a partir de 1. Por lo tanto, para usar keypressCount para iluminar el dígito correcto de siete segmentos, hay que añadir uno (+1) a su valor.
La siguiente sentencia implementa esa práctica función de depuración. Si ha puesto el DEBUGboolean a true, el código imprimirá todas sus variables al puerto serie.
A continuación, se incrementa el keypressCount en uno y luego se comprueba si se han pulsado cuatro dígitos. Si es así, es hora del espectáculo. La instrucción delay(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 nativo en lenguaje C:
if (memcmp(codeBuffer, code,4)==0) { if(DEBUG){Serial.println("MATCH!");} unlock(); }
La función memcmp() compara dos elementos de 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 principio 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 sentencia condicional. Si son iguales (y DEBUG es verdadero), se imprime «MATCH! Si la comparación de memoria falla, entonces la función no devuelve un «0», lo que significa que se introdujo un código incorrecto.
En cualquier caso, desea borrar la pantalla, listo para la próxima vez. Así que usted llama a la función clearDisplay(). Otra enseñanza nativa en el idioma C hace un poco de limpieza de la memoria:
memset(codeBuffer, 0, 4);
Esto borra el codeBuffer explícitamente fijá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 manejar explícitamente la memoria en lugar de dejar las cosas al azar.
Por último, debido a que ésta fue la cuarta pulsación de tecla y sólo hay que evaluar cuatro dígitos, el keypressCount necesita ser reajustado a cero para que esté listo para la siguiente iteración.