No hay ninguna razón para usar un transistor o MOSFET en un circuito de detección de interruptor como este. Simplemente puede conectarse de la siguiente manera:
Esto toma mucho menos componentes y permite una fácil detección del cambio a través de la lectura ADC. Ningún interruptor presionado lee un valor de casi 5V. S1 produce una tensión inferior a 2,5 V, S2 produce una tensión de aproximadamente 2,5 V y S3 produce una tensión superior a 2,5 V. Por supuesto, usted es libre de cambiar los valores de resistencia para adaptarse a su aplicación. Solo recomiendo mantenerlos en el rango de Kohm para que alguna impedancia de entrada en el ADC no cambie mucho los divisores de voltaje conmutados. También tenga en cuenta que cuando detecte cada interruptor, debe verificar un rango de lecturas A / D para cada uno para adaptarse a la tolerancia y el ruido de la resistencia.
Editar: (en respuesta a la consulta de OP sobre cables largos)
Esto debería funcionar bien con el cableado para tocar los interruptores montados en una placa de circuito. También puede funcionar si los interruptores están cableados remotamente con cables, pero considera varias cosas. Primero, puede haber ruido en los cables más largos, así que asegúrese de seleccionar las resistencias para que la diferencia de voltaje de un interruptor a otro sea mucho mayor que el voltaje de ruido. También mantenga la impedancia más baja en el rango de Kohm como sugerí. Si usó resistores de rango Mohm, las líneas serán más susceptibles a la captación de ruido.
Con los interruptores montados de forma remota, donde el cable puede ser muy largo o si existe alguna inquietud con respecto a la ESD, sería recomendable no utilizar esta clasificación analógica para la detección del interruptor. En su lugar, cada interruptor debe ser tratado de una manera digital. El tratamiento digital hace que sea más práctico:
- Proporcione sujeción ESD en las señales en el borde de la placa de circuito.
- El interruptor de búfer señala si es necesario para proteger los pines MCU sensibles.
- Señales de interruptor de rebote con 1 y 0 en lugar de valores analógicos variables.
- Organice recuentos de conmutadores más grandes en una matriz para guardar los pines GPIO.