我从我最近刚开始使用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 ;
}
答案 0 :(得分:9)
您遇到的问题是因为按钮故障会在每次按下按钮时产生许多中断。您可以使用硬件here找到一个很好的描述和解决方法。
让我解释一下,当您按下按钮时,机械触点将具有一种瞬态状态,在该状态下,它将在短时间内波动ON-OFF。释放按钮时可能会发生相同的效果。
解决此问题的一种方法是使用与负载并联的电容器。另一个"更容易"方式将由软件完成。我们的想法是设置一个固定的任意时间,在此时间内不允许新的中断。您可以使用millis()或micros()库来设置此时间。代码看起来像这样。
unsigned long lastInterrupt;
void ngt()
{
if(millis() - lastInterrupt > 10) // we set a 10ms no-interrupts window
{
state = !state;
lastInterrupt = millis();
}
}
这样您就不会处理新的中断,直到10ms过去。
注意:根据您的要求调整时间。