Arduino中断的那些坑

在中断里面detachInterrupt之后在外部attachInterrupt会导致直接进入中断,经过探索,发现了是因为中断标志没有清除,导致attachInterrupt的时候检测到了中断标志,直接进入中断。因此在attachInterrupt之前可以先清除中断标志。

下列代码是以atmega328p (Nano/Uno)的代码为例,如果有的是其他芯片,需要使用对应的方法清除中断

#define clearInt0() EIFR &= _BV(INTF0) //Interrupt 0 Flag Clear
#define clearInt1() EIFR &= _BV(INTF1) //Interrupt 1 Flag Clear