Um método que usei tira proveito da natureza capacitiva das entradas do CMOS.
simular este circuito - esquemático criado usando o CircuitLab
No circuito acima do interruptor, quando fechado, permite que o resistor de pull-down carregue / descarregue as capacitâncias de entrada do GPIO até o nível do solo.
O truque desse circuito é usar a natureza bidirecional de um GPIO para manter a entrada carregada em um nível lógico alto quando o comutador estiver aberto.
A rotina de controle periodicamente desliga o pino como um nível alto, ou permite brevemente a tração, tempo suficiente para manter a carga das tampas. O pino de entrada atua como um bit de memória dinâmica e, na maioria dos dispositivos, retém essa carga por um período considerável e utilizável.
Quando configurada corretamente, se o botão for pressionado, a carga no pino descarregará mais rápido que a taxa de atualização. Essa condição pode ser detectada como parte do algoritmo de atualização como uma operação de leitura antes da atualização ou usada para acionar uma interrupção.
A energia é usada brevemente durante o pulso de atualização, tanto para recarregar os capacitores quanto através do resistor e alternar se estiver fechado. No entanto, o comprimento do pulso de atualização é curto e a frequência de polling faz com que a corrente de atualização seja relativamente insignificante.
Obviamente, este método é ativo. Se o micro for colocado no modo de suspensão, o estado do interruptor será indeterminado ao acordar. O primeiro ciclo de atualização após a ativação deve ignorar a leitura dos pinos. Além disso, este método não deve ser usado para ativar o micro. Antes de ir para a cama, também é aconselhável habilitar o pino como saída baixa para estacioná-lo em um estado de corrente zero.
Para ler mais switches estáticos, como dip-switches de configuração, uma rotina dedicada pode ser usada em vez de um ciclo de atualização contínuo. Após a leitura, os pinos do GPIO devem ser "estacionados" em um estado ativo de baixa saída (corrente zero) para evitar o problema de entradas flutuantes.
NOTA: Essa técnica sofre um pouco de sensibilidade ao ruído se os comprimentos dos traços forem longos e viajarem por uma área barulhenta. Como tal, R1 deve estar próximo ao pino de entrada. No entanto, eu não o recomendaria para conectar um interruptor a alguma distância de um painel frontal em algum lugar, a menos que você adicione capacitância extra próxima ao pino.