我在 ATmega 168P 上有一个 arduino nano。我正在学习中断。写了一点代码
#define PIN_LED 8
volatile int actionState = LOW;
void setup()
{
attachInterrupt(0, bb1, RISING);
pinMode(PIN_LED, OUTPUT);
}
void loop()
{
digitalWrite(PIN_LED, actionState);
delay(10);
}
void bb1()
{
if (actionState == LOW)
{
actionState = HIGH;
}
else
{
actionState = LOW;
}
}
作品。但是有一个问题。我把它接到 5V 引脚上,二极管亮了。我要放手了。半秒后,我再次带上5V,但二极管没有熄灭。为什么?多久可以调用一次中断?
您很可能忘记考虑接触反弹等因素。当您引入 5V 电源时,它会很快发生。但是一秒钟是永恒的微控制器设法多次处理您的中断。结果,您认为中断没有触发,而实际上它触发了偶数次。
将延迟(200)添加到中断处理程序,一切都应该到位。
频率为 32 Hz,您需要轮询按钮,而不是更频繁。然后触点不会发出嘎嘎声。
必须在按钮和接地之间放置一个 100nf 电容器以减少干扰,包括。喋喋不休:
更好的是,通过发射极跟随器来实现: