Joa*_*sta 2 c arduino arduino-uno
我正在 Arduino 中制作一个非常简单的项目,除了将单击读取为保持的按钮之外,一切都工作正常,我希望将其读取为单击。
我有一个连接到我的 Arduino 的数字显示器,它应该显示数字 5,一旦我单击按钮,数字应该增加 5,但是当我单击时,它会不断增加 5,直到我放开,所以单击一下就会从5 到 155,而不是 10。
buttonState = digitalRead (btnPin);
if (buttonState == LOW)
{
leilao = leilao + 5;
sevseg.setNumber(leilao);
sevseg.refreshDisplay();
previousMillis = currentMillis;
}
Run Code Online (Sandbox Code Playgroud)
“leilao”是应该增加 5 的值。
您需要获得信号的“边缘”。尝试这个:
#define btnPin 2
uint8_t btn_prev;
void setup() {
pinMode(btnPin, INPUT_PULLUP);
btn_prev = digitalRead(btnPin);
}
void loop() {
uint8_t btn = digitalRead(btnPin);
if (btn == LOW && btn_prev == HIGH)
{
//your code here
}
btn_prev = digitalRead(btnPin);
}
Run Code Online (Sandbox Code Playgroud)
您可以将按钮信号视为正方形。当按钮没有按下时没有任何东西,当你按下它时,电压流动,所以看起来像这样:
因此,您的原始代码正在更改整个“开启”持续时间的值。上面的代码在图中查找“上升沿”,理论上它是单个时刻。
如果这对您不起作用,请查看 Arduino 的“Debouncing”教程,其中还添加了时间概念,直到您的代码被触发。