0

我想为两个按钮进行去抖动。所以打开红色 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);

}
4

1 回答 1

0

总体而言,使用忙延迟是一种相当粗略的去抖动按钮的方法,但它适用于爱好者的目的。

  • 更改estadoAnterior为一组预期的按钮状态。
  • 为按钮引脚制作一个整数数组boton。(在真正的 MCU 编程中,这将是一组端口 + 掩码。)
  • 在 debounce 函数中,为需要 debounce 的按钮创建一组 debounce bool 值。检查哪些需要循环去抖动。
  • 如果有任何按钮需要去抖动,请等待 5 毫秒。不是每个按钮,而是一次。(顺便说一句,5ms 可能不够,也可能不够,具体取决于按钮类型)
  • 再次阅读该按钮并使用结果。

一个更专业的方法可能是这样的。

完成后,将所有标识符重写为English。我们在编程时不使用我们的母语,因为这会使源代码变得一团糟。您的代码混合了英语和您的母语,很难阅读。

于 2017-09-29T09:02:18.470 回答