gpt4 book ai didi

arduino - Arduino AttachInterrupt()似乎运行了两次

转载 作者:行者123 更新时间:2023-12-04 17:18:18 31 4
gpt4 key购买 nike

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

他试图做一个中断,并且有点奏效。问题是它运行了两次(他调用了该函数),所以 bool 值被重置了。

我试图找到答案,但找不到任何答案,所以我在这里。

请帮我。

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解决它的方法。

让我解释一下,当您按下按钮时,机械触点将处于短暂的状态,在这种状态下,机械触点会在短时间内波动。释放按钮时可能会发生相同的效果。

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

unsigned long lastInterrupt;

void ngt()
{

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

state = !state;

lastInterrupt = millis();

}
}

这样,只有经过10毫秒,您才可以处理新的中断。

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

关于arduino - Arduino AttachInterrupt()似乎运行了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29756145/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com