我有一个简单的程序,我宣称在普通循环和ISR之间传递的变量是易失性的,但我在显示' count'的值时仍然会变得垃圾。 .....我假设我错过了一些小细节。任何帮助表示赞赏,我确信它有点小。提前谢谢!
const int Int_Pin = 3; // the interrupt pin location
volatile int Count = 0; // how many times the int pin pressed
void setup()
{
pinMode(Int_Pin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(Int_Pin), Int_Routine, LOW); // indicates an interrupt routine is used
// trigger on Int_Pin based on a LOW signal
Serial.begin(9600); // baud rate for Serial Comm
}
void loop()
{
Serial.println("From the top...");
for (int a = 1; a < 11; a++) // counter from 1 to 10 then print the count value
{
Serial.println(a);
delay(1000);
}
Serial.println(Count);
}
void Int_Routine()
{
Count = Count + 1;
}
答案 0 :(得分:0)
当您使用LOW作为触发器时,您将看不到增量更改,如0,1,2,3。只要引脚保持低电平,LOW就会让中断反复运行。如果您希望每个脉冲计数一次,则使用RISING或FALLING。要知道,即使这样,你可能仍会看到每次按下的倍数,如果这是一个按钮或开关,你有一些终端反弹。