我使用的是Arduino Uno,并且已经根据我发现的说明1对其进行了设置,使其可以处理数字引脚2、3、4和5上的中断。
void setup()
包含以下代码来设置中断。
//Endable Interrupts for PCIE2 Arduino Pins (D0-7)
PCICR |= (1<<PCIE2);
//Setup pins 2,3,4,5
PCMSK2 |= (1<<PCINT18);
PCMSK2 |= (1<<PCINT19);
PCMSK2 |= (1<<PCINT20);
PCMSK2 |= (1<<PCINT21);
//Trigger Interrupt on rising edge
MCUCR = (1<<ISC01) | (1<<ISC01);
现在,ISR(PCINT2_vect)函数在每个中断上触发。就像魅力一样。我的问题是,找出哪一个引脚是最好/最快的方法是什么?
我在Re中找到了一些东西:最好在引脚2、3上使用ISR(PCINT2_vect)或attachInterrupt?,但我不了解代码,因此无法立即使用。但这看起来令人印象深刻...
解决办法是什么?
[2] http://arduino.cc/forum/index.php/topic,72496.15.html#lastPost
编辑:
目前,我正在从输入引脚寄存器中读取引脚状态:
if (PIND & 0b00000100)
Serial.println( "PIN 2" );
if (PIND & 0b00001000)
Serial.println( "PIN 3" );
if (PIND & 0b00010000)
Serial.println( "PIN 4" );
if (PIND & 0b00100000)
Serial.println( "PIN 5" );
最后,我要计算引脚上的中断。但是,我怎么能保证没有两次计数呢?
在电子领域,更多的人可能已经把Arduino和其他电子产品弄得一团糟。
—
Earlz 2011年
如果您认为,问题应该在那儿,将其标记出来。我解决了我的登录问题。
—
madc 2011年
@Earlz:这是一个编程问题,所以是话题性的。它是针对爱好者平台的事实是无关紧要的;请参阅关于stackoverflow的其他数百个arduino问题以供参考。
—
BlueRaja-Danny Pflughoeft