我希望你没有从某个地方复制这段代码,有些代码没有意义。
例如,什么是“prkgbrake”?什么是“刹车”?它们没有被声明。为什么没有“setup()”功能?
然而,可以通过多种方式实现去抖动。我会修复你的代码。这样你就会明白你做错了什么。
int exbutton = LOW;
unsigned int _delay = 200;
int pushButton = 2;
void setup()
{
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
pinMode(pushButton, INPUT_PULLUP);
}
void loop()
{
while (digitalRead(pushButton) == LOW && exbutton == LOW)
{
if((millis() - last) > _delay)
{
Serial.println("Button Pressed");
while(digitalRead(pushButton) == LOW);
}
}
last = millis();
}
说明:
假设您的按钮与数字引脚 2 连接。当您将数字引脚与按钮一起使用时,最好使用上拉/下拉。您可以为此使用外部电阻器或内部电阻器。内部电阻仅支持上拉。
要了解有关上拉/下拉结帐的更多信息,请查看此Arduino 页面。底线是当您使用引脚作为输入时,它就像天线一样,可以捕获来自周围环境的信号,称为浮动状态。因此最好将引脚保持在已知状态。如果您使用内部上拉,引脚将始终为HIGH
。所以按钮配置必须以某种方式使当它被按下时针应该去LOW
。
上拉配置
该代码pinMode(pushButton, INPUT_PULLUP);
启用数字引脚 2 作为输入并启用上拉电阻。
loop()
应该像这样工作:1
)检查按钮是否被按下(即如果是LOW
)。
2)如果不更新last
变量。
3)如果是,则不要更新last
,并进入while
循环。
4) 现在继续检查是否millis()-last
大于_delay
。如果不是,它将返回while
循环并检查按钮是否仍被按下。如果是,那么它将返回并检查是否millis()-last
超过_delay
。它将继续这样做,直到它通过所提到的去抖动延迟量。
5)如果按钮在'_delay'时间之前被按下(即转到HIGH
),那么它将更新last
并检查按钮是否被按下并开始计算延迟时间。
注意使用_delay
变量。它将定义按钮的响应能力。