Провода не имеют надлежащего контакта/мешают

Я хочу регистрировать нажатия кнопок с помощью программы Python, которую я написал с помощью Raspberry Pi 3. Мои кнопки подключены как к земле, так и к контактам 22 и 27 GPIO. Однако, когда кнопки нажаты, это не дает постоянное значение True, но оно меняется очень быстро, поэтому я получаю что-то вроде «Правда, Ложь, Правда, Правда, Ложь, Ложь, Ложь, Правда, Правда», когда все должно быть правдой.

Однако, когда кнопка не нажата, она дает постоянную ложь. Я проверил все провода и пробовал с резисторами и без них (10k и 4.7k), но они дают тот же результат.

Есть ли способ исправить эту проблему? Пробовал также с разными переключателями, но все они дают одинаковый результат. Это провода со стандартными перемычками.

Покажите схему того, как именно вы их подключили и как (подтягивание?) вы настроили контакты.
вы используете «нажатие» как глагол, и мы говорим о подпрыгивающих 10 мс ответа Олина, или как существительное, состояние удерживания, и мы говорим о секундах, которые должны быть истинными, когда подпрыгивает остановился?
Прерывистый и ненадежный дребезг контактов является нормальным явлением для любого плохого переключателя. Добавление шунта C к переключателю таким образом, что RC> интервал опроса, устраняет дребезг напряжения переключателя путем зарядки и удержания. Время затухания RC можно контролировать с помощью 1M=R. Предполагая, что переключатель составляет <100 Ом из углерода, а подтяжка R к Vdd (max) составляет 1 МОм, C может быть 10 нФ. для 10 мс = T, что должно превышать время отскока.

Ответы (2)

Это то, что называется подпрыгиванием . Вы должны ожидать, что любой механический переключатель будет делать это до нескольких десятков мс при включении и отключении.

Чтобы справиться с этим, вы выполняете устранение дребезга в программном обеспечении. Обычно это означает, что вы не считаете новое состояние кнопки действительным, пока не увидите это состояние постоянно в течение 50 мс или около того.

Если подпрыгивание сохраняется, пока вы удерживаете кнопку нажатой, значит, кнопка неисправна. Замени это.

Кто бы ни проголосовал за это, что именно вы считаете неправильным?
Спасибо за ваш ответ! Это не подпрыгивает , потому что даже когда я проверяю каждую 1/10 секунды, проблема сохраняется. Когда провод не подключен, это постоянный 0, как и должно быть. Когда есть провод, подключенный к контакту GPIO, он меняется между 1 и 0, поэтому вы получаете что-то вроде этого: 00000011111110000001111110000000000000111111 Когда этот провод подключен к земле (кнопка нажата), он дает постоянный 0, который я нахожу немного немного странно.
@its: Что-то не складывается. Похоже, что этот вход имеет высокий импеданс, и при подключении только провода он улавливает шум. Однако это не соответствует тому, что вы сказали в вопросе. Покажите схему и объясните, что именно происходит, когда кнопка нажата, а когда нет. Часть про провод не имеет смысла.
Я очень ценю ваши усилия! Я исправил это, добавив подтягивающий резистор (поправьте меня, если я ошибаюсь) к земле, и вместо того, чтобы подключить кнопку к земле, я подключил ее к 3,3 В. Сейчас работает без проблем (пока). Спасибо за ваши быстрые ответы и хорошего дня!

В большинстве руководств говорится, что у вас должно быть только два провода, подключенных к кнопке: один от контакта GPIO к кнопке и один от кнопки к земле. Это не сработало для меня, как должно. У меня все еще есть «провод GPIO», подключенный к кнопке, но рядом с землей есть резистор 10 кОм. Другой звук кнопки я подключил к 3.3в. Убедитесь, что вы не используете ничего выше 3,3 В, потому что контакты GPIO не могут работать с напряжением выше 3,3 В!