Hay algunas maneras.
Lo más simple es usar 7 resistencias en serie, con las primeras 6 duplicando su valor y la última igual que la 6a. Así que 1-2-4-8-16-32-32 por ejemplo. Luego, conecte el botón para hacer un cortocircuito en una resistencia cada uno, excepto el 'superior'. Entonces tiene un valor único para cada combinación de botones que puede muestrear con un convertidor A / D. Tenga en cuenta que solo necesita dos cables para el teclado (suponiendo que pueda soldar la resistencia a través de las teclas / botones). La séptima resistencia puede sentarse cerca del microcontrolador.
También puede poner todos los botones en paralelo, con una resistencia en serie que duplica el valor de cada botón. Cree un divisor de voltaje con los botones y una resistencia que le ofrezca el mejor rango de voltaje para los valores de resistencia que eligió para los botones. Sin embargo, esto da un "rango dinámico" y una "resolución" peores en comparación con el enfoque anterior, pero un poco más de matemáticas solo para comprender a continuación:
Con 6 botones, esto le da (por ejemplo) 10,20,40,160,320 y 640 ohmios en serie con una resistencia de 640ohmios. La secuencia binaria significará que cada combinación dará un valor diferente, no trivial, pero deberías poder crear una tabla de búsqueda con los 64 valores.
Tenga en cuenta que necesita usar una entrada analógica con suficiente resolución para resolver el valor más alto y más bajo y las dos coincidencias más cercanas.
El valor más alto es 640ohm, el más bajo es de aproximadamente 5 ohmios. 1: 100 o menos, no hay problema.
La diferencia más pequeña será 10 // 320 = 9.48ohm y 10 // 640 = 9.69ohm
Entonces, deberías poder detectar una diferencia de 0,3 ohmios en una escala de 640 ohmios, o 1: 2100 aproximadamente. Esto significa que necesitará al menos un convertidor A / D de 12 bits y poco ruido.
Si la resolución y el rango dinámico de su A / D no son suficientes, puede probar algunos trucos con diodos y alternar el signo de voltaje (positivo / negativo) usando dos salidas digitales. Necesitarías tres cables para ir a los botones.
Esto le daría dos juegos de 3 botones, lo que significa una resolución mucho mejor, pero tendría que lidiar con una configuración de software más compleja para enfrentar este escenario. Aunque no imposible. Con 10, 20 y 40 ohmios formando un divisor de voltaje con una resistencia de 40 ohmios, obtendría los siguientes voltajes para una fuente de 5V (ignorando la caída de diodo aquí):
R1 R2 R3 V
1E+18 1E+18 1E+18 5.00
1E+18 1E+18 40 2.50
1E+18 20 1E+18 1.67
1E+18 20 40 1.25
10 1E+18 1E+18 1.00
10 1E+18 40 0.83
10 20 1E+18 0.71
10 20 40 0.63
Dicho esto, si vas a utilizar 3 cables de todos modos, una tercera forma sería para ChaliePlex los botones. Esto es un poco más complejo en cuanto a software, pero lo bueno es que no necesita una entrada analógica. Google 'Charlieplex 6 botones' para más información.