Paso 1: Pensar que es a través de
Por lo tanto, vamos a pensar esto.
Si te fijas en el tutorial de arriba, puedes ver que la solución de fuerza bruta es que para cada botón hay una energía, un drenaje a través de un resistor de KOhm 10 y una clavija de entrada. La energía y el drenaje pueden ser compartidos a través de todos los botones, pero, en el circuito que se muestra allí, no podemos evitar el hecho de que necesitamos una clavija de entrada separada para cada botón individual. Si nuestra aplicación requiere 10 botones, necesitamos 10 pines de Arduino. ¡ Ay!.
Como dio la materia algún pensamiento, sin embargo, se me ocurrió que esto era similar a un problema en un proyecto diferente que había trabajado encendido, es decir, abordar múltiples dígitos de la exhibición de LED, algo que vemos en todas partes de hornos de microondas a despertadores. Así que por favor ten paciencia conmigo mientras estoy divagando en tierra de LED por un momento.
En la mayoría de circuitos que incluyen múltiples dígitos LED, cada dígito no se activa con una corriente constante. Por el contrario, el controlador establece el patrón de segmento de un dígito de destino particular (decir, el patrón que hace el número "5") y ese patrón a todos los dígitos en la pantalla simultáneamente. Él entonces fijó el patrón para el dígito siguiente, salidas, etc., a través de todos los dígitos y repitiendo para siempre.
Pero, os preguntaréis, ¿cómo es posible, entonces, ver números diferentes en cada dígito? Esto es posible debido a que el controlador utiliza transistores para encender el dígito de destino y apagar todos los demás antes de imprimir el patrón.
Por ejemplo, supongamos que tenemos una pantalla LED de 4 dígitos (cada dígito denominado A, B, C y D), y queremos mostrar los números "5678" en esta pantalla. Esto es lo que ocurre:
- el controlador enciende A y convierte los dígitos de B, C y D de
- imprime el patrón para el número "5" que todos los dígitos
- da vuelta a B y A, C, D de
- patrón de salidas para el número "6"
- da vuelta a C y A, B, D de
- salidas de "7"
- convierte D a y A, B, C
- salidas de "8"
- se repite desde el paso 1
Esto permite que la electrónica a ser mucho más sencillo y más barato. Y sólo funciona porque los transistores y el regulador pueden encender dígitos y fuera tan increíblemente rápido que cada segmento individual de cada dígito realmente no tiene tiempo a desaparecer antes de que vuelve renovado. Este proceso se conoce como "Multiplexación" o "efecto estroboscópico", y le permite conducir, teóricamente, cualquier número de dígitos de LED. (En la actualidad, sin embargo, hay un límite: cuando se agrega más y más dígitos, notarás que empiezan a oscilar, porque el controlador no puede actualizar lo suficientemente rápido. Finalmente, este parpadeo se convierte tan mal que ya no eres capaz de reconocer los números.)
OK, de vuelta a tierra botón.
Vi una conexión entre la multiplexación de LED por encima y este problema de botones múltiples: ¿Qué pasa si nos podemos multiplexar los botones de alguna manera? En lugar de la salida de la multiplexación, se multiplexan la entrada: Esto significa que nos apague todos sino un botón, detectar ese botón arriba/abajo estado, guardarlo y luego hacer lo mismo para el botón siguiente, etc., pedaleando por todos los botones muy, muy rápidamente. Solo botón está activo en cualquier momento dado, y el controlador sabe que uno es, podríamos utilizar la misma, solo entrada de pin para cualquier número de botones.
Suena bien, pero Agárrate: todavía tenemos que activar todos los botones, uno a la vez. ¿Por lo tanto, no nos acaba de cumplir el problema, ya que ahora necesitamos X pernos de la salida para X botones?
Bueno, esto es que traemos en los registros de cambio. El registro de desplazamiento es un IC que recibe un patrón de 8 bits, uno tras otro (es decir, en serie) y, cuando ordenó, conducirá ese patrón a 8 pines de salida simultáneamente (es decir, en paralelo). Sólo la búsqueda de Instructables para "registro de desplazamiento" y encontrarás muchos tutoriales. Registros de desplazamiento están rápido, fácil de usar, muy barato y tremendamente potente. Pero, aún necesitamos para el registro de desplazamiento, y se tarda 3 pines de Arduino para hacerlo. Sin embargo, lo maravilloso es que puedes conectan múltiples registros de desplazamiento en una cadena y aún conducir toda la cadena con el mismo 3 pines de Arduino!
¿OK, así que hace todo esto que nos? Si podemos averiguar cómo multiplexar las entradas de botón, podemos utilizar un perno de la entrada, y si podemos aprovechar los registros de cambio, sólo necesitamos 3 pines de salida. ¡ Hola! Nos hemos traído el problema hasta que requiere solo 4 pines totales para manejar un número ilimitado (teóricamente) de botones. El punto de ruptura es 4: Si usted necesita 4 o menos botones, solo fuerza bruta lo: utilizar 4 pines de entrada, ya que este enfoque es innecesariamente complejo y no ganar nada. Si, sin embargo, usted necesita 5 o, sobre todo muchos más, usted gana si utiliza el siguiente circuito y el código.