Цитата:
Во второй части статей «GPIO для чайников» мы подключали кнопку между двумя портами. Один порт устанавливали на «вывод» и в состояние «1», а другим портом читали эту «1» через кнопку. При отпущенной кнопке на втором порту читался «0», а при нажатой- «1».
Всё вроде бы работало. Но недавно у такого способа подключения обнаружился один неприятный недостаток. Такое подключение кнопки оказалось неустойчивым к помехам. Когда я свою RPI подключил к сети при помощи Wi-Fi USB донгла, то все программы, в которых использовалось такое включение кнопки, просто сошли с ума. RPI детектировал нажатие кнопки даже тогда, когда к ней никто не притрагивался. Виной всему оказался длинный провод, которым была подключена кнопка к RPI. Работающий Wi-Fi адаптер наводил на нём потенциал, с уровнем достаточным для детектирования «1» на порте GPIO. Такое поведение кнопки никуда не годится.
Нужно принимать меры по помехозащищённости. В данном случае поможет использование экранированного провода до кнопки, либо даже простое уменьшение длины проводов, соединяющих кнопку с RPI. Но можно поступить проще. Раз наш RPI реагирует на помехи при отсутствии сигнала на входе, то разумным решением будет перевести порт, которым мы читаем состояние кнопки в состояние логической «1». Раз на нём всегда будет «1», то уже никакая помеха не сможет этот порт перевести в «0». А значит, наш порт станет невосприимчивым к помехам.
Но мне такое решение вообще не подходит! Мне нужно подключаться именно между двумя пинами GPIO. И ведь работает же стабильно геймпад, который я подключил ранее. Но там я воспользовался готовым примером, да и геймпад работает по сути по последовательному интерфейсу - там с данными только один провод. И когда я начал разбираться дальше, то выяснилось, что геймпад подключен к одному из двух GPIO, которые аппаратно притянуты у нулю. В тот момент мне показалось, что всё - приплыли. Но всё-таки я решил не сдаваться раньше времени. Полноценно подключил эту Ардуиновскую клавиатуру, загрузил Linux и запустил пример на Python по обслуживанию этой клавиатуры. Удивлению моему не было предела, так как эта же клавиатура, которая так чувствительна к помехам в моём эмуляторе, абсолютно стабильно работает под Linux'ом! Значит, какое-то решение должно быть!