Estoy haciendo algún proyecto y estoy usando Arduino para crear un prototipo, tengo que usar 10 botones (junto con más cosas) y no tengo suficientes pines.
Una solución que se me ocurre es usar los pines analógicos y usar cada uno de ellos para dos botones, algo como esto:
simular este circuito : esquema creado con CircuitLab
De esa manera puedo leer el pin A0 y saber cuál de ellos está siendo empujado al ver si el voltaje es de 5V o la mitad de eso.
¿Es esta una buena idea? NUNCA se supone que deben presionarse los diferentes botones al mismo tiempo, que es el único problema que puedo pensar.
¿Hay mejores formas?
Respuestas:
¿Por qué desperdiciar múltiples pines analógicos para dos interruptores cada uno, cuando podría hacer cualquier cantidad de botones en un solo pin analógico?
Dos formas de hacerlo. Uno está en serie, el otro es paralelo.
Así son algunos controles de audio del volante del automóvil. Y cómo funcionan algunos de los controladores en línea para iPod más antiguos.
Dependiendo de las resistencias que use, si necesita presionar varios botones al mismo tiempo y qué tan sensible es su entrada analógica, podría tener los 10 botones en un solo pin.
fuente
Eso funcionaría, pero una mejor manera es con una matriz . Este es el mismo concepto que los LED de multiplexación con una matriz, pero con interruptores.
Esta es una matriz de 2x2. Una matriz útil es más grande, porque a este tamaño, no está guardando ningún pin sobre la conexión de los interruptores individualmente.
Con una matriz 3x3 puede obtener 9 interruptores. Necesita 10, por lo que puede agregar una fila más o una columna más y admitir 12 interruptores, o simplemente colocar el décimo interruptor en su propio pin.
La ventaja aquí es que puede usar IO digital, que es más barato y generalmente más abundante que IO analógico. Un registro de turno es una forma económica de agregar más E / S digitales, si se agota.
Si desea incluso menos pines, puede, para aumentar su complejidad, usar charlieplexing . Tendrá que agregar diodos además de sus interruptores, y estos diodos probablemente cuestan tanto como un registro de desplazamiento. Sin embargo, si el costo no es su principal preocupación, entonces puede tener alguna ventaja. Con este método, puede leer todos sus interruptores (hasta 12, en realidad) con cuatro pines.
fuente
La entrada analógica es un enfoque válido, debería poder tener varios botones. También me gustaría sugerir usar un chip IO Expander como el MCP23017 . Tiene 16 pines que pueden ser entradas son salidas y se controla con I2C usando dos pines. Adafruit tiene una biblioteca Arduino para ello.
fuente
Sí, parece una buena idea, pero de todos modos voy a proponer una alternativa que se me ocurrió.
Si tiene acceso a puertas lógicas, puede asignar muchos
n
botones aceil(log2(n + 1))
pines a través de la lógica booleana. Como ejemplo, si tiene 4 botones, pero solo 2 pines, puede crear una configuración como esta:Es decir,
button0
presionado debe tenerpin0
ypin1
bajo;button1
,pin0
bajo ypin1
alto;button2
,pin0
alto ypin1
bajo; ybutton3
,pin0
ypin1
alto.De esto surgirían las siguientes expresiones booleanas
De este modo, se podría realizar una asignación de 4 botones a 2 pines con solo 2 compuertas OR. Sin embargo, necesitaría un pin adicional y algo de lógica adicional para indicar si se está presionando algún botón.
Por supuesto, aún habrá problemas si se presionan varios botones simultáneamente.
Además, si aún seguirá con el enfoque de resistencia, considere usar valores más grandes en las resistencias que no sean 100 ohmios, ya que 5 V a través de resistencias del orden de 100s de ohmios producirían una corriente del orden de 10s de mA, que es amable de innecesariamente alto. Supongo que valores más razonables serían 10k Ohm o 47k Ohm.
fuente
La siguiente página puede ser útil:
http://txapuzas.blogspot.co.uk/2010/07/papertecladoanalogico-varios-pulsadores.html
Está escrito en español, pero los esenciales están graficados, creo que es una muy buena idea para ti.
En este video puede ver el resultado final, el boceto también está en la página, función encapsulada para facilitar la implementación en sus proyectos
Video de Youtube: teclado de 10 teclas en un solo pin
Aquí hay un esquema del sitio anterior:
fuente