Существует эффект отказов переключателя , который происходит, когда мы используем простые дешевые кнопки с двумя контактами, подключенными к GPIO.
Во время нажатия и нажатия происходит много аналоговых вещей, которые не принадлежат цифровому домену.
Существует два способа устранения этих отказов:
- аппаратный способ (добавление фильтров R C)
- программный способ - ожидание некоторое время для фильтрации этих аналоговых мировых эффектов (это может быть «фиктивная задержка», «использование конечных автоматов», «прерывание временного отключения»)
Fortunaly python Библиотека GPIO поддерживает реализацию программного обеспечения для debouncing.
Когда вы определяете обратный вызов для такого «прерывания», вы можете указать время, в течение которого слушатель go не будет слышать никаких изменений на указанном выводе.
На самом деле не имеет значения, используете ли вы «плохая» (шумная) кнопка или нет. Вы можете использовать эту встроенную функцию подавления для достижения того, что вам нужно:
GPIO.add_event_detect(21, GPIO.FALLING, callback=event, bouncetime=5000 )