我想为两个按钮进行去抖动。因此,打开红色 LED 或绿色 LED,知道按下了哪个按钮。我的程序仅适用于 1 个按钮。
我认为我需要一个用于两个按钮的数组。
有人可以帮助我改进我的代码两个或更多按钮吗?
int boton = 11;
int led = 13;
boolean estadoAnterior = LOW;
boolean estadoActual = LOW;
boolean ledOn = false;
int cont=0;
void setup()
{
pinMode(boton, INPUT);
pinMode(led, OUTPUT);
Serial.begin(9600);
}
boolean rebote(boolean eAnterior)
{
boolean eActual = digitalRead(boton);
if (eAnterior != eActual)
{
delay(5);
eActual = digitalRead(boton);
}
return eActual;
}
void loop()
{
estadoActual = rebote(estadoAnterior);
if (estadoAnterior == LOW && estadoActual == HIGH)
{
ledOn = !ledOn;
cont++;
Serial.println(cont);
}
estadoAnterior = estadoActual;
digitalWrite(led, ledOn);
}
最佳答案
总的来说,使用繁忙延迟是一种相当粗糙的消除按钮弹跳的方法,但它对于业余爱好者来说是有用的。
- 将
estadoAnterior
更改为预期按钮状态数组。 - 为按钮引脚
boton
创建一个整数数组。 (在实际的 MCU 编程中,这将是端口 + 掩码的数组。) - 在去抖动函数中,为需要去抖动的按钮创建一个去抖动 bool 值数组。检查哪些需要循环去抖。
- 如果有任何按钮需要去抖动,请等待 5 毫秒。不是每个按钮,而是一次。 (顺便说一句,5ms 可能足够也可能不够,具体取决于按钮类型)
- 再次读取该按钮并使用结果。
更专业的方法可能类似于 this .
完成后,将所有标识符重写为英语。我们在编程时不使用母语,因为这会使源代码变得一团糟。你的代码是英语和你的母语的混合体,很难阅读。
关于c - 使用两个按钮去抖,用 Arduino 打开不同的 LED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46485095/