c - 使用两个按钮去抖,用 Arduino 打开不同的 LED

标签 c function arduino debouncing

我想为两个按钮进行去抖动。因此,打开红色 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/

相关文章:

c - 在 C 中打印数组时的奇怪行为?

c - # 序列的平均值

ruby - 通过串口从 Ruby 向 Arduino 写入字节

node.js - 任务计划管理

c - 从结构中输出值

c - OpenSSL & C - 带 SHA256 或 SHA512 的哈希密码

javascript - 在javascript匿名方法中访问复制的整数变量

生成 v4 UUID 的 PHP 函数

mysql - SQL-根据另一列的内容查找最大值

c++ - 7段显示,Arduino-代码