El enfoque clásico aquí es usar algún tipo de IO extensor IC. En el caso más simple, esto sería simplemente un registro de desplazamiento paralelo a serie, por ejemplo, una variante del 74xx165:
LaimagenesdelahojadedatosdeTexasInstrumentsSN74LV165A.
Laideaeslasiguiente:cuandosebajaelpinSH,losvaloresenlospinsAHsealmacenanenlosflip-flopsinternos,porloqueaquíesdondeseconectanlosinterruptores/botonesqueconectanelpindirectamentealsuministrodevoltaje(sipresionado,porejemplo),oconecteatierraelpinatravésdeunaresistencia(grande):
simular este circuito : esquema creado usando CircuitLab
De esa manera, cuando se presiona el botón, el voltaje en la entrada es "alto", de lo contrario es bajo. Por lo general, es recomendable conectar un condensador en paralelo a la resistencia, ya que contrarrestará el llamado "rebote". Los valores reales de la resistencia y el condensador no son críticos: si utiliza un valor de resistencia demasiado pequeño, consumirá mucha corriente con cada botón que presione, y si elige un valor de condensador demasiado grande, los botones aparecerán mucho tiempo hasta que sean presionados y liberados de manera efectiva, pero en general, algo como 10kOhm y 10nF - 100nF, valores abundantes en la mayoría de las cajas de partes, deberían funcionar bien para la interacción humana.
Otra sugerencia más: si necesita ir a comprar piezas, compre las llamadas redes de resistencia; por ejemplo, hay partes que contienen 8 resistencias idénticas que tienen un pin común (que se conectaría a tierra aquí, y 8 pines individuales. De esa manera, se ahorra mucho trabajo de soldadura, y su circuito puede verse muy limpio y ordenado.
Ahora, después de haber tirado SH "alto" nuevamente, los valores de entrada se almacenan en los flipflops.
Ahora su microcontrolador comenzará a enviar una señal de reloj (alta, baja, alta, baja, ...) a la entrada CLK. En cada flanco ascendente (es decir, transición de bajo a alto), aparece un valor de entrada en QH, y los estados internos se empujan un paso "hacia la derecha", lo que significa que el segundo flip-flop contiene el valor antiguo del primero, el tercer flip-flop el antiguo valor del segundo y así sucesivamente. Después de seis ciclos de reloj, todos los 8 valores de entrada se han mostrado secuencialmente en QH. Es por eso que este registro de desplazamiento también suele denominarse paralelo al registro de desplazamiento de conversión en serie.
Puede en realidad encadenarlos: si toma un segundo registro de desplazamiento y adjunta su QH a su entrada SER del registro de desplazamiento, entonces los valores de salida se "concatenarán" a los valores de los registros de su primer desplazamiento. De esa manera, con solo tres pines en su Arduino (un pin pisando SH, un pin pisando CLK y un pin leyendo la salida en serie de QH), puede tener virtualmente cantidades ilimitadas de botones, y eso a un precio unitario de menos de 20ct por 8 entradas
La única parte limitante es que regularmente tiene que bajar SH, jalar de nuevo y generar 8 * (N_shiftregisters) ciclos de reloj; esto se debe hacer con la frecuencia suficiente para no perderse una pulsación de tecla, pero generalmente, con microcontroladores ejecutándose en MHz, y con hardware SPI que en realidad no es diferente a hablar con tales registros de cambios, esto no es un problema en absoluto. no es raro ver a alguien consultar los registros de turnos un par de veces por segundo.