我开始使用Uno并且我能够从我在网上找到的旋转库中获得中断工作但是当我将项目移动到Mega并尝试将其更改为不同的引脚时它停止了。我花了几个小时试图从在线资源中找出大型中断引脚,并且找不到任何好的资源来充分解释大型中断引脚。
我正在尝试使用这样的中断。
Rotary r = Rotary(10,11);
void setup(){
PCICR |= (1 << PCIE0);
PCMSK0 |= (1 << PCINT4) | (1 << PCINT5);
sei();
}
ISR(PCINT0_vect){
//stuff
}
如果某人有首选方法,那我用于中断的引脚并不重要。我只是需要它才能工作。
答案 0 :(得分:0)
描述了here的Arduino中断。它比您提供的示例代码更容易使用。
//Mega2560
// external interrupt int.0 int.1 int.2 int.3 int.4 int.5
// pin 2 3 21 20 19 18
void setup()
{
// interrupt # 0, pin 2
attachInterrupt(0, myISR, CHANGE); // Also LOW, RISING, FALLING
}
void loop()
{
}
void myISR() // must return void and take no arguments
{
// stuff
}
您不需要使用sei();
启用中断,因为attachInterrupt()
会为您执行此操作。但您可以使用cli();
禁用中断,并使用sei();