如何使按钮读取一次单击而不是在arduino中按住

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 的值。

Bre*_*oro 9

您需要获得信号的“边缘”。尝试这个:

#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”教程,其中还添加了时间概念,直到您的代码被触发