Más de un botón en el mismo pin

12

Estoy haciendo un proyecto y estoy usando Arduino para hacer un prototipo, tengo que usar 10 pulsadores (junto con más cosas) y no tengo suficientes pines.

Una solución que podría pensar es usar los pines analógicos y usar cada uno de ellos para dos botones, algo como esto:

simular este circuito : esquema creado usando CircuitLab

De esa manera puedo leer el pin A0 y saber cuál de ellos se está presionando para ver si el voltaje es de 5 V o la mitad de eso.

¿Es esta una buena idea? NUNCA se supone que los diferentes botones pulsadores se presionen al mismo tiempo, que es el único problema que puedo evitar.

¿Hay mejores maneras?

    
pregunta MyUserIsThis

5 respuestas

21

¿Por qué desperdiciar varios 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í es como son algunos controles de audio en el volante del automóvil. Y cómo funcionan algunos de los controladores de iPod en línea más antiguos.

Dependiendo de las resistencias que uses, si necesitas presionar varios botones al mismo tiempo y la sensibilidad de tu analógico, puedes tener los 10 botones en un solo pin.

    
respondido por el Passerby
10

Eso funcionaría, pero una mejor manera es con una matrix . Este es el mismo concepto que los LED de multiplexación con una matriz, pero con interruptores.

Estaesunamatrizde2x2.Unamatrizútilesmásgrande,porqueenestetamaño,noestáguardandoningúnpinalconectarlosconmutadoresindividualmente.

Conunamatrizde3x3puedesobtener9interruptores.Necesita10,porloquepuedeagregarunafilamásounacolumnamásyadmitir12conmutadores,osimplementecolocareldécimoconmutadorensupropiopin.

LaventajaaquíesquepuedeutilizarIOdigital,queesmásbaratoygeneralmentemásabundantequeelIOanalógico.Un registro de cambios es una forma barata de agregar más IO digital, si se agota.

Si desea aún menos pines, puede, para aumentar la 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, puedes leer todos tus interruptores (hasta 12, en realidad) con cuatro pines.

    
respondido por el Phil Frost
2

La entrada analógica es un enfoque válido, debería poder tener varios botones en ella. También me gustaría sugerir el uso de un chip IO Expander como el MCP23017 . Tiene 16 pines que pueden ser entradas, las salidas y su control con I2C usando dos pines. Adafruit tiene una biblioteca de Arduino para ello.

    
respondido por el BrianK
2

Sí, me parece una buena idea, pero de todos modos voy a proponer una alternativa que se me ha ocurrido.

Si tiene acceso a puertas lógicas, puede asignar muchos botones n a ceil(log2(n + 1)) pins 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:

Buttons | Pins
----    | --
0123    | 01
----    | --
0001    | 00
0010    | 01
0100    | 10
1000    | 11

Es decir, button0 presionado debería tener pin0 y pin1 bajo; button1 , pin0 low y pin1 high; button2 , pin0 high y pin1 low; y button3 , pin0 y pin1 high.

De esto surgirían las siguientes expresiones booleanas

pin0 = button2 OR button3
pin1 = button1 OR button3

Por lo tanto, se podría realizar una asignación de 4 botones a 2 pines con solo 2 O puertas. Sin embargo, necesitarías un pin adicional y un poco de lógica adicional para indicar si se está presionando algún botón.

Por supuesto, todavía habrá problemas si se presionan varios botones simultáneamente.

Además, si sigue utilizando el enfoque de resistencia, considere usar valores más altos en las resistencias que no sean de 100 ohmios, ya que 5 V a través de resistencias del orden de 100s de ohms producirían una corriente del orden de 10s de mA que es algo innecesariamente alto. Supongo que los valores más razonables serían 10k Ohm o 47k Ohm.

    
respondido por el nijoakim
0

La siguiente página puede ser útil:

enlace

Está escrito en español, pero las esenciales están diagramadas, creo que es una muy buena idea para ti.

En este video puede ver el resultado final, el boceto también se encuentra en la página, función encapsulada para facilitar la implementación en sus proyectos

Youtube video: 10 teclas del teclado en una sola pin

Aquí hay un esquema del sitio anterior:

    
respondido por el JohnnyDeauville

Lea otras preguntas en las etiquetas