Une méthode que j'ai utilisée tire parti de la nature capacitive des entrées CMOS.
simuler ce circuit - Schéma créé à l'aide de CircuitLab
Dans le circuit au-dessus du commutateur, lorsqu'il est fermé, il permet à la résistance de rappel de charger / décharger les capacités d'entrée du GPIO jusqu'au niveau de la terre.
L'astuce avec ce circuit est d'utiliser la nature bidirectionnelle d'un GPIO pour maintenir l'entrée chargée à un niveau logique élevé lorsque le commutateur est ouvert.
La routine de commande tourne périodiquement la broche à un niveau élevé ou active brièvement le pull-up, suffisamment longtemps pour maintenir une charge des capuchons. La broche d'entrée agit alors comme un bit de mémoire dynamique et, avec la plupart des appareils, maintiendra cette charge pendant une durée considérable et utilisable.
Lorsqu'il est correctement configuré, si le bouton est enfoncé, la charge sur la broche se décharge plus rapidement que le taux de rafraîchissement. Cette condition peut ensuite être détectée dans le cadre de l'algorithme de rafraîchissement comme une lecture avant l'opération de rafraîchissement, ou utilisée pour déclencher une interruption.
L'alimentation est brièvement utilisée pendant l'impulsion de rafraîchissement, à la fois pour recharger les condensateurs et à travers la résistance et l'interrupteur si elle est fermée. Cependant, la longueur de l'impulsion de rafraîchissement est courte et la fréquence d'interrogation fait que le courant de rafraîchissement est relativement insignifiant.
De toute évidence, cette méthode est active. Si le micro est mis en veille, l'état de l'interrupteur sera indéterminé au réveil. Le premier cycle de rafraîchissement après le réveil doit ignorer la broche lue. De plus, cette méthode ne doit pas être utilisée pour réveiller le micro. Avant d'aller au lit, il est également sage d'activer la broche comme sortie basse pour la garer dans un état de courant nul.
Pour lire plus de commutateurs statiques, comme les commutateurs DIP de configuration, une routine dédiée peut être utilisée plutôt qu'un cycle de rafraîchissement continu. Après la lecture, les broches GPIO doivent ensuite être "parquées" dans un état de sortie faible actif (courant nul) pour éviter le problème des entrées flottantes.
REMARQUE: cette technique souffre un peu de la sensibilité au bruit si les longueurs de trace sont longues et traversent une zone bruyante. En tant que tel, R1 doit être proche de la broche d'entrée. Cependant, je ne le recommanderais pas pour brancher un interrupteur à une certaine distance du panneau avant, sauf si vous ajoutez une capacité supplémentaire près de la broche.