我正在研究Arduinos,我想使用中断来使用旋转编码器。但我想将中断代码降至最低。
我可以在一个中断上使用多个触发器吗?
我想重新编写我的实际代码:
attachInterrupt(0, ChangeA, CHANGE);
类似
attachInterrupt(0, FailingA, FAILING);
attachInterrupt(0, RisingA, RISING);
有可能吗?
答案 0 :(得分:1)
不,不完全可能。外部中断配置为仅对内部的一种可能性做出反应。
您可以做的一件事是使用CHANGE
中断服务程序,并在ISR开头测试引脚的值,以执行FallingA()
或RisingA()
。
这里存在潜在的问题。在测试之前,引脚可能已经再次更改,因此触发中断的中断可能已经下降,比如说,测试确定它正在上升。防止两个快速中断的一种方法是检查标志是否仍然设置。如果在中断开始时它应该被清除,如果它被设置,则再次发生变化。没有切实可行的方法来防止三次快速变化。
如果你真的想使用两个独立的ISR,你还有额外的引脚吗?如果是这样,您可以将引脚连接在一起并在一个上运行FALLING
ISR,在另一个上运行RISING
ISR。