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