MultiButton
MultiButton copied to clipboard
关于按键去抖动
源码写得精彩!拜读并仔细分析了一下,有个问题想请教。按键去抖需要3次按键值(间隔5ms)相同才能确认,但是在状态机处理中,感觉没有完全用去抖处理后的按键值进行判断处理,而是用上次保存或去抖处理后的按键值进行处理,这样对一些需要延时判断的按键动作判断会不会有影响?能否加一个按键去抖有效标志做辅助判断,一旦去抖完毕,此标志有效,后续状态机只有在标志有效情况下才取按键值进行处理,处理完后标志置为无效。不知我的理解是否正确?请指点,谢谢!
我跟您的想法一样,这样做完全可行,但是我揣摩了一下大佬的代码,他想表达的意思应该是这样: 程序一直按照之前的按键状态处理任务,突然你改变状态了,但是由于抖动,为了准确无误我不能马上更新按键状态;继续保持原来的按键状态处理三次,就假装没看到按下/松开; 15ms后,更新按键状态,按照新的状态处理任务。 经典的:按键按下-->delay(15ms)-->确定按下了,处理任务; 经典的15ms完全占用了cpu,程序处于阻塞状态,什么也干不了(除了中断);大佬用状态机可以使得这15ms可以继续执行程序。 https://www.bilibili.com/video/BV16J411q7yv/?vd_source=8dcbe6e6956c69c45c67cc9ab703a2f5;这个视频下面的评论很精彩。