Arduino AttachInterrupt() 似乎 运行 两次

Arduino AttachInterrupt() seems to run twice

我从一个最近开始使用 arduino 的学生那里得到了一些代码。

他尝试打断并成功了。问题是它 运行 两次(他调用的函数)所以布尔值被重置。

我试图找到答案,但找不到任何答案,所以我来了。

请帮帮我

boolean state = 1 ;
void setup()

{
pinMode (2 , INPUT);
pinMode (8 , OUTPUT);
Serial.begin(38400);        
attachInterrupt( 0 , ngt, RISING);


}


void loop()

{

Serial.println (digitalRead(2));
digitalWrite ( 8 , state );
delay(50);

}

void ngt()
{

state = !state ;


}

您遇到的问题是因为按钮故障会在每次按下按钮时产生许多中断。您可以找到一个很好的描述和使用硬件解决它的方法here

我解释一下,当你按下按钮时,机械触点会有一个短暂的ON-OFF波动的瞬态。释放按钮时可能会发生相同的效果。

解决此问题的一种方法是使用与负载并联的电容器。另一种 "easier" 方式将由软件完成。这个想法是设置一个固定的任意时间,您不允许新的中断。您可以使用 millis() or micros() 库来设置这个时间。代码看起来像这样。

unsigned long lastInterrupt;

void ngt()
{

  if(millis() - lastInterrupt > 10) // we set a 10ms no-interrupts window
    {    

    state = !state;

    lastInterrupt = millis();

    }
}

这样你就不会处理新的中断,直到 10 毫秒过去。

注意:根据您的要求调整时间。