Arduino ISR中的易失变量

时间:2018-02-17 22:31:08

标签: arduino interrupt

我有一个简单的程序,我宣称在普通循环和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;
}

1 个答案:

答案 0 :(得分:0)

当您使用LOW作为触发器时,您将看不到增量更改,如0,1,2,3。只要引脚保持低电平,LOW就会让中断反复运行。如果您希望每个脉冲计数一次,则使用RISING或FALLING。要知道,即使这样,你可能仍会看到每次按下的倍数,如果这是一个按钮或开关,你有一些终端反弹。