【发布时间】:2017-09-29 08:46:48
【问题描述】:
我想对两个按钮进行去抖动。所以打开红色 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);
}
【问题讨论】:
-
显示您尝试过的内容
-
这是一个设计问题。使用
delay(),您实际上暂停了您的程序,并且只有一个线程,没有办法使用这种方法来消除两个按钮的抖动。草图解决方案:改用一些计时器和状态机。 -
@FelixPalmen Arduino 是裸机微控制器,而不是 PC。你的评论毫无意义。
-
@Lundin 如果你不知道,这是一个状态机。这或多或少是我的代码在做什么,它需要存储有关去抖动阶段是否处于活动状态以及最后读取的值是什么的信息。所以请停止你粗鲁的cmets,谢谢。
标签: c function arduino debounce