Paso 3: Construir el teclado software de Arduino
Primero lo corro a través de matrices así que usted puede ver la teoría y luego te mostraré cómo está escrito el controlador utilizando el IDE de Arduino. Si usted es un codificador seguro y quieres saltarte esto, puede obtener una copia del código completo en la página de recursos de mi sitio web, AltoidsDrone.com.
Para recapitular, la información clave para escribir el programa que nos reunimos en el último paso fue:
- La película con 5 contactos tiene las líneas de datos
- Las líneas de datos utilizan los pinesA0-A4 y tienen resistencias pull-up a + 5V
- La película con 8 contactos tiene las líneas de dirección y utiliza pines digitales 2-9
- El teclado está dispuesto en una matriz de 5 × 8 (datos x dirección)
Cómo funciona una matriz de teclado
Una matriz de teclado es una red de cables, tales como las líneas de dirección y datos formando la cuadrícula de 5 x 8 en el espectro. Cada botón es un botón que se cruza con una fila con una columna (las cruces de la red) y físicamente todos los botones se mantienen abiertos por defecto. Esto significa que las filas y columnas no están conectadas y no corriente (o voltaje) se pasa de una fila a una columna o viceversa.
Hay dos tipos de matriz, pull-up y pull-down. Usted puede encontrar más información acerca de las diferencias operacionales aquí. El teclado original del espectro había utilizado una configuración pull-up. La cosa para recordar es es bajo en nuestra matriz, no alto. Así que cuando una tecla es un bajo voltaje que necesitamos para activar y luego buscar. La primera imagen muestra cómo funciona la matriz.
En las anteriores cuatro rejillas, se presiona el botón conexión de la segunda columna a la segunda fila. Para comenzar con todo en alto. La primera columna se cambia a bajo, y el controlador comprueba la tensión en cada fila para ver si hay una caída (primer grid). Se presiona ningún botón en la columna para todas las filas en 5V. La primera columna devuelve alta, y la segunda columna se envía baja (segunda imagen). Las filas secuencialmente se comprueban otra vez. El botón presionado en la segunda fila se conecta la fuente de 5V de la segunda fila a los 0V de la segunda columna por medio de la resistencia + (tercera imagen). El regulador detecta el 0V en esa fila y sabe que el segundo botón de la segunda columna es que la letra 'j' tan salidas de la tecla 'j'. El ciclo continúa a lo largo de las columnas y las filas, a continuación repite (Cuarta imagen).
En Resumen, es el funcionamiento de una matriz. Así, en la práctica todo nuestro controlador del teclado se tiene que hacer es realizar el mismo ciclo de bajada de cada columna y comprobando secuencialmente las filas de esa columna para 0V. Entonces puede consulta de pulsación de tecla a la salida a la USB.
El software de escritura
Yo estoy proporcionando el controlador de software completos aquí para que usted pueda ver como funcionamos a través de poner juntos. Si eres nuevo en codificación para Arduino, tiene un boceto en blanco abierta y puedes poner el código a medida que vamos. Este tutorial también está disponible con resaltado de sintaxis completo a través de este enlace.
Lo que nos da este programa es las letras A-z en superior y minúscula, los números 0-9, un espacio, retroceso, bloqueo de mayúsculas y retorno. Esto cubre los aspectos básicos de lo que usted necesitará usar una computadora; Créeme, con un espacio diminuto botón en la parte inferior, usted no querría hacer procesamiento de textos en este teclado. Conectados en todas nuestras claves y contablemente, por lo que si desea hacer cada función en el trabajo de teclado, se puede añadir en el programa más adelante.
Fiirst, cambiar la placa a Leonardo o el LeoStick. Vaya a herramientas > Board y seleccione uno utiliza.
Comenzaremos con la estructura del bosquejo básico:
Arriba el setup(), necesitamos declarar nuestras variables y escribir nuestros datos de asignación de teclas.
Los números enteros 'datos: nada' y 'addressNo' especifican el número de filas y columnas respectivamente. Como tal, la matriz de caracteres de 'Teclado' es 8 por 5 abajo (coincidencia de nuestros conectores de membrana de teclado) y dos de profundidad superior y minúscula. Los arreglos de discos 'dataPin' y 'dirección' coincidir nuestros números pin soldado y se utilizan para fijar fácilmente y utilizar las conexiones del teclado (o modificarlos fácilmente sin cambiar el código funcional). Los espacios en blanco en la parte inferior son el espacio (A4, 2), volver (A4, 3), retroceso (A3, 2) y CAPS-LOCK (A4, 4).
Nota: Este controlador funcionará para cualquier matriz de teclado. Todo lo que necesita hacer para un teclado diferente se establece las variables de tamaño, pernos y mapa de claves para teclado en el código anterior. El resto funcionará igual. Si está utilizando una configuración hacia abajo, simplemente intercambiar todas las altas y bajas, que nos va a venir pronto.
Ahora sólo necesitamos declarar algunas variables más para nuestra lógica de programa. La variable boolean 'wasReleased' que ayudará a asegurar que el teclado produce un teclazo por prensa, dándole ' n ' en lugar de 'nnnnnnnnnnnnnn'. Pop estos en directamente bajo el código anterior.
Ahora podemos pasar a la sección setup() del bosquejo. En esta sección que deba configurar los pines y los puso en un estado listo si es necesario, entonces nuestra función de teclado. En lugar de especificar individualmente cada pin, podemos utilizar para bucles para salvar a repetición, por lo tanto, las matrices, 'dataPin' y 'dirección' contiene los números que podemos referirnos aquí. Los primeros ciclos del bucle a través de nuestros pins digitales (las líneas de dirección). Estos son los que fijamos a alta o baja, por lo que declara cada uno como una salida y establece en su estado por defecto del alto.
Asimismo, el segundo bucle se ejecuta a través de los pines analógicos (nuestras líneas de datos) y declara a cada uno como una entrada.
Finalmente, iniciamos la interfaz USB para su uso como un dispositivo de interfaz.
Es el final de nuestra sección setup(). Podemos ahora pasar al loop(), donde residirá el resto del código. A medida que vamos a poner '...' donde irá el siguiente trozo de código. El loop() ciclo las líneas de dirección y comprobar las líneas de datos, luego la tecla correspondiente de salida. Básicamente, utilizaremos otra vez para bucles con la siguiente estructura:
A bucle for para las líneas de dirección, que la línea de dirección que utiliza baja al principio y vuelta a elevado al final los ciclos:
Mientras que la línea de dirección es baja, tenemos que ejecutar a través de las líneas de datos a ver si alguno de ellos es baja, indicando una prensa del botón. Donde los '...' es, vamos a utilizar otro para el lazo.
Ahora tenemos que leer cada línea de datos. Un botón presionado enviará la línea de datos baja, que en binario es el entero 0 (y por lo tanto, alta sería un 1). Así, el entero 'presionado' se asigna el valor binario de la línea de datos. Luego podemos probar ese valor con la declaración de if() de ' if(pressed == 0)'. El entero de 'relanzamiento' se incrementa para mantener un conteo de la cantidad de líneas de datos controles se realizan entre pulsar un botón, lo que nos permite ver si se liberan todas las llaves antes de permitir que las pulsaciones de teclado más.
En este punto entramos en una tecla que se detecten. Una pulsación de tecla sólo se debe una vez por presión del botón (si es el primero de esa pulsación) que nos da ' n ' y no 'nnnnnnnnnnnnn'. Por lo tanto, ponemos a prueba la 'wasReleased' boolean utilizando otra sentencia if().
O no enviar una pulsación de tecla a través del USB, tenemos que hacer alguna limpieza aquí. El método 'Keyboard.releaseAll()' asegura que se suspendió cualquier pulsaciones de tecla se envía al USB. El entero de 'capital' cambios de lugares en la posición más interna de la matriz de 'teclado'. Como tal, si se pulsa por segunda vez cambiar apagado, se debe restablecer la posición minúscula de 0. Por último, si se ha detectado una tecla, el programa necesita bloquear de enviar pulsaciones de tecla más hasta que todas las llaves han sido liberadas. En consecuencia, la cuenta de 'relanzamiento' debe restablecer a 0 y nuestro 'wasReleased' establecida en false.
Suponiendo que, el ciclo actual es el primero de esta tecla (así que 'wasReleased' es verdad), llegamos a registrar nuestro teclado a USB.
Caracteres especiales, bloqueo de mayúsculas, retroceso y vuelta no encajan en una matriz de caracteres y por lo tanto deben tratarse individualmente. Como tal, cada uno tiene una sentencia if() apuntando a la combinación específica de dirección y datos para esa clave. La primera línea incrementos 'capital' para el caso de cambiar de puesto la posición cuando se utiliza el bloqueo de mayúsculas. El 'otro' en la línea siguiente significa que el bloqueo de mayúsculas está Bloq y no cambio; Esto coincide con la etiqueta del botón y simplifica enormemente nuestra lógica de pulsación de tecla. Si la tecla es una letra, número o espacio, la última línea hace referencia a la actual datos, dirección número y capital estatal para seleccionar la letra apropiada de nuestro mapa de claves.
Finalmente, lo último que debemos hacer es volver a activar nuestras pulsaciones si todas las llaves han sido liberadas, así que esta parte va antes de la final '}' al final del loop().
Este simplemente comprueba que el 'relanzamiento' cuenta es mayor que el tamaño de la matriz de 'teclado' (y por lo que ha conseguido pasado la clave detectado última vez). Si es así, cambia 'wasReleased' a true, volver a activar las pulsaciones de teclado a USB.
Es el controlador del teclado completo. Simplemente conectar el Arduino al ordenador vía USB y cargar el bosquejo en su arduino. Una vez que haya reiniciado, inmediatamente debe ser capaz de escribir con teclado de goma vieja de Spectrum.
Para ver cómo tengo esto en mi espectro junto con una Raspberry Pi, incorporado Wifi y VGA soporte pago este enlace en AltoidsDrone.com.
Acknowldgements:
- Muchas gracias a 1000bit.it por sus esquemas y guía completa del mundo vintage.