用两个按钮去抖动,用Arduino打开不同的LED

时间:2017-09-29 08:46:48

标签: c function arduino debounce

我想为两个按钮进行去抖动。因此,打开Red led或Green 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);

}

1 个答案:

答案 0 :(得分:0)

总的来说,使用忙碌延迟是一种相当粗略的方法来消除按钮,但它可以用于业余爱好者目的。

  • estadoAnterior更改为预期按钮状态数组。
  • 为按钮引脚boton创建一组整数。 (在真正的MCU编程中,这将是一个端口+掩码阵列。)
  • 在去抖动功能中,为需要去抖动的按钮创建一个去抖动bool值数组。检查哪些需要在循环中进行去抖动。
  • 如果需要任何按钮去抖,请等待5ms。不是按钮,而是一次。 (根据按钮类型,5t可能或可能不足够)
  • 再次阅读该按钮并使用结果。

更专业的方法可能与this一致。

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