外观
踩坑Robotics Stack Exchange2016-01-20
轮编码器一次遮光触发多次中断
本文由 AI 根据公开内容整理,可能有误,请以原文为准:Wheel encoder triggers interrupt too many times(Robotics Stack Exchange #8950)
状态:已解决
问题
轮编码器光束被切断一次时,attachInterrupt 绑定的中断多次触发;即使用 RISING,从 HIGH 到 LOW 时也会计数,count 一次变化可增加 9、15、26 等。
环境
Arduino;两驱动轮简易机器人;轮编码器接数字引脚 2,后续方案使用 2 和 3。
解决办法
- 将中断改为监听
CHANGE,分别为左右编码器绑定doEncoderRight和doEncoderLeft。 - 对编码器输入启用上拉:
pinMode(..., INPUT)后digitalWrite(..., HIGH)。 - 在中断函数中用
firstChangeR、firstChangeL标记第一次变化;第一次检测到变化时delay(1)等待抖动结束。 - 用
digitalRead与保存的真实状态right_set、left_set比较;只有当前状态不同于保存状态时才翻转状态并递增countR或countL。 - 在
loop中将firstChangeR、firstChangeL重置为true,等待下一次触发。
原问题作者:ejalaa12;采纳答案作者:ejalaa12。原内容依 CC BY-SA 4.0 授权,本页摘要同样依 CC BY-SA 4.0 授权。
来源
本页事实对应的公开页面,以原文为准。