Si solo quiere hacer un teclado, sin usar su Makey Makey, puede hacerlo usando la funcionalidad GPIO de la Raspberry Pi. Pero como comentamos antes, la Raspberry Pi no tiene suficientes pines disponibles para hacer un teclado que sea realmente útil.
Sin embargo, si está dispuesto a agregar 2 circuitos integrados, puede hacerse un teclado con tantas teclas que tendrá un problema para encontrar una función para cada tecla.
Mi sugerencia es conectar 2 I2C IC al bus I2C en la Raspberry Pi, y usarlos para crear su propia matriz de escaneo.
Si usa un PCF8574, tiene 8 pines de E / S disponibles, si obtiene un PCF8575, incluso tiene 16 pines de E / S disponibles. Al combinarlos, puede obtener una matriz de escaneo de:
- 64 teclas: (2x PCF8574)
- 128 teclas: (1x PCF8574 y 1x PCF8575)
- 256 teclas: (2x PCF8575)
Debe usar siempre uno de ellos como salida y uno como entrada. En la salida, deja que un bit "camine" del bit 0 al bit n (7 o 15), estas son las columnas de la matriz. Por otro lado, lee constantemente el valor de la entrada y estas son las filas de la matriz. La combinación de qué bit de salida está activo y qué bit de entrada es '1' es la tecla que se presiona.
En realidad, crear la matriz es la mayor parte del trabajo, y mientras lo hace, no olvide agregar un diodo después de cada interruptor que coloque en la matriz, este diodo (un 1N4148 normal funcionará bien) debe colocarse con el ánodo al interruptor y el cátodo a la línea de la fila. La caída de voltaje de 0.6V sobre este diodo no debería ser un problema, el 2.7V restante (3.3V-0.6V) debería ser un '1' lógico.
La razón de este camión lleno de diodos es que evitará cosas como el efecto fantasma y el enmascaramiento de las llaves. El efecto fantasma es el efecto de que si presiona más de tres teclas al mismo tiempo, es posible que se interprete como una tecla totalmente diferente porque más filas tendrán un '1' lógico. El enmascaramiento es el efecto de que, si tiene varias teclas presionadas y suelta una tecla, esto (en algunas situaciones) no se detectará porque la fila de esa tecla sigue siendo un '1' lógico.
La imagen muestra un ejemplo de efecto fantasma, se presionan los botones A, B, D y además de la Fila 1 (para el botón A) también la Fila 2 (para el botón C) es alta, en este momento la Columna 1 está activa, lo cual no es correcto.
Después de toda la aventura de hardware, debe escribir o adaptar un controlador de kernel para usar realmente el teclado en Linux. Un buen punto de partida podría ser este enlace: Controlador para las teclas en el expansor IOC TCA6416 I2C , esta es una idea similar, pero solo utiliza un teclado de 16 teclas.
Espero que esto te ayude un poco.