Я пишу mp3-плеер, который записывает информацию на ЖК-дисплей, я хотел бы преобразовать его из использования клавиатуры в использование кнопок, но я постоянно получаю слишком много нажатий клавиш. Я пробовал подтягиваться и падать / подниматься, но у меня все тот же результат. Кто-нибудь знает по собственному желанию, если это известная проблема, или я просто делаю что-то не так? О, я тоже делаю это полностью на C, используя wiringPi.
12
if(digitalRead(data) && millis()-startTime > 10){
и установите startTime каждый раз, когда он входит в цикл.Ответы:
Механические кнопки и переключатели могут пострадать от отказов переключателя, когда они быстро переключаются между открытым и закрытым в течение нескольких миллисекунд.
Вы можете попробовать отменить кнопку / переключатель в программном или аппаратном обеспечении.
Вероятно, самое простое в программном обеспечении.
Если уровень изменяется (включен или выключен или включен), подождите x миллисекунд и снова прочитайте gpio. Если он все еще находится в новом состоянии, то предположим, что это настоящий переход. Значение х может быть что-то вроде 20.
Для аппаратных решений ищите этот пост
источник
Потратьте время, чтобы прочитать руководство по разоблачению Джека Гансле . Первая страница иллюстрирует проблему в деталях, а вторая - как ее решить аппаратно или программно. Не существует «идеального» метода отказов, но есть много плохих!
Это проблема, с которой вы будете сталкиваться неоднократно, если взаимодействуете программное обеспечение с коммутаторами, поэтому стоит потратить время на его понимание, и статья Джека - самый лаконичный способ, который я когда-либо видел.
источник
В приложениях с системным тикером я обычно использую сдвиговый регистр.
Конечно, вы должны проводить событие нажатия кнопки только по переднему фронту.
источник