C++ Arduino上单个中断的多个触发器

C++ Arduino上单个中断的多个触发器,c++,arduino,interrupt,isr,C++,Arduino,Interrupt,Isr,我正在研究Arduinos,我想使用中断来使用旋转编码器。但是我想把中断代码减少到最小 我可以在一个中断上使用多个触发器吗 我想回复我的实际代码: attachInterrupt(0, ChangeA, CHANGE); 差不多 attachInterrupt(0, FailingA, FAILING); attachInterrupt(0, RisingA, RISING); 可能吗?不,不完全可能。外部中断配置为仅对内部一种可能性作出反应 您可以做的一件事是使用更改中断服务例程,并测试I

我正在研究Arduinos,我想使用中断来使用旋转编码器。但是我想把中断代码减少到最小

我可以在一个中断上使用多个触发器吗

我想回复我的实际代码:

attachInterrupt(0, ChangeA, CHANGE);
差不多

attachInterrupt(0, FailingA, FAILING);
attachInterrupt(0, RisingA, RISING);

可能吗?

不,不完全可能。外部中断配置为仅对内部一种可能性作出反应

您可以做的一件事是使用
更改
中断服务例程,并测试ISR开始处的pin值,以执行
FallingA()
RisingA()

这里有一个潜在的问题。引脚可能在您测试之前再次发生变化,因此触发中断的中断可能已经下降,例如,您的测试确定它正在上升。防止两次快速中断的一种方法是检查标志是否仍然设置。如果在中断开始时,它应该被清除,如果它被设置,则再次发生更改。没有切实可行的方法来防止三个快速变化


如果你真的想使用两个独立的ISR,你有没有额外的pin码?如果是这样的话,你可以把这些管脚连接在一起,在一个管脚上运行一个下降的ISR,在另一个管脚上运行一个上升的ISR。该死!我有2个旋转编码器和2个中断引脚由I2C使用。无论如何谢谢你!(:是您使用的旋转编码器(即,它是一个输入外围设备,如旋钮)或者通过电机?因此..在管脚处获得的最大频率是多少?还有…这是最后一个也是最重要的问题:你真的需要在中断中实现这个代码吗?它是如此的快和重要以至于你需要中断来处理它吗?如果频率小于..比如说100 Hz,可能最好ndle它在软件(轮询)…嗯…我很抱歉,但我有2个旋转编码器…每个1024个TIC。这意味着每秒钟旋转两次(40cm/s),我有8000个中断…8kHz太多了,无法在软件中处理它!(这不是我在这个Arduino上必须做的唯一事情)。