Uno de los métodos que he utilizado tiene la ventaja de la naturaleza capacitiva de CMOS de entradas.
simular este circuito – Esquema creado mediante CircuitLab
En el circuito de arriba el interruptor, cuando está cerrado, permite que la resistencia pull-down para la carga/descarga de la entrada capacitancias de los GPIO al nivel del suelo.
El truco con este circuito es utilizar el carácter bidireccional de un GPIO para mantener la entrada de carga a una lógica de alto nivel cuando el interruptor está abierto.
El control de rutina periódicamente convierte a los pines de salida, como un alto nivel, o brevemente permite el pull-up, el tiempo suficiente para mantener una carga de las tapas. El pin de entrada, a continuación, actúa como una memoria dinámica poco y, con la mayoría de los dispositivos, sostienen que cobran por una considerable cantidad utilizable de tiempo.
Cuando se configura correctamente, si se pulsa el botón de carga en el pin se descarga más rápido que la tasa de actualización. Esa condición se puede detectar como parte de la actualización del algoritmo de lectura de antes de la operación de actualización, o utilizado para conducir a una interrupción.
El poder es usado brevemente durante la actualización, el pulso, tanto para la recarga de los condensadores y a través de la resistencia y el interruptor si está cerrada. Sin embargo, la longitud de la actualización de pulso es corto y la frecuencia de sondeo resultados en la actualización actual es relativamente insignificante.
Obviamente, este método es un activo. Si el micro es puesto a dormir, el estado del interruptor será indeterminado en despertar. El primer ciclo de actualización después de wake-up debe ignorar el pin de lectura. También, este método no debe utilizarse para activar el micro. Antes de ir a la cama, también es conveniente habilitar el pin como salida baja para aparcar en un cero estado actual.
Para leer más interruptores estáticos, como la configuración de los dip-switches, dedicado rutina puede ser utilizado en lugar de un continuo ciclo de actualización. Después de la lectura, los pines GPIO debe ser "estacionado" en un activo de baja del estado de salida (corriente cero) para evitar la flotación entradas problema.
NOTA: Esta técnica hace sufrir un poco de sensibilidad al ruido si la traza de las longitudes de largo y viajar a través de un área ruidosa. Como tal, R1 debe estar cerca de la entrada de pin. Sin embargo, no lo recomiendo para conectar un interruptor a cierta distancia en un panel frontal en algún lugar, a menos que usted añadir capacitancia cerca del pin.