Один метод, который я использовал, использует в своих интересах емкостную природу входов CMOS.
смоделировать эту схему - схема, созданная с использованием CircuitLab
В цепи над переключателем, когда он замкнут, позволяет понижающему резистору заряжать / разряжать входные емкости GPIO до уровня земли.
Уловка с этой схемой состоит в том, чтобы использовать двунаправленную природу GPIO, чтобы держать вход заряженным до логического высокого уровня, когда переключатель разомкнут.
Процедура управления периодически выводит вывод на высокий уровень или кратковременно включает подтягивание, достаточно продолжительное для поддержания заряда колпачков. В этом случае входной контакт действует как бит динамической памяти и в большинстве устройств удерживает этот заряд в течение значительного и полезного промежутка времени.
При правильной настройке при нажатии кнопки заряд на выводе будет разряжаться быстрее, чем частота обновления. Это условие затем может быть обнаружено как часть алгоритма обновления как чтение перед операцией обновления или использовано для управления прерыванием.
Питание кратковременно используется во время импульса обновления, как для зарядки конденсаторов, так и через резистор и переключатель, если он замкнут. Однако длина импульса обновления мала, и частота опроса приводит к тому, что ток обновления является относительно незначительным.
Очевидно, что этот метод является активным. Если микрофон перевести в спящий режим, состояние переключателя будет неопределенным при пробуждении. Первый цикл обновления после пробуждения должен игнорировать считывание вывода. Кроме того, этот метод не должен использоваться, чтобы разбудить микро. Перед сном также целесообразно включить вывод в качестве низкого выхода, чтобы оставить его в состоянии с нулевым током.
Для считывания большего количества статических переключателей, таких как настраиваемые DIP-переключатели, можно использовать специальную процедуру, а не непрерывный цикл обновления. После считывания выводы GPIO должны быть «припаркованы» в активном состоянии низкого выхода (нулевой ток), чтобы избежать проблемы плавающих входов.
ПРИМЕЧАНИЕ. Этот метод немного страдает от чувствительности к шуму, если длины трассы велики и проходят через шумную зону. Таким образом, R1 должен быть близко к входному контакту. Тем не менее, я бы не рекомендовал его для подключения переключателя на некотором расстоянии от передней панели где-либо, если вы не добавите дополнительную емкость близко к контакту.