0

私が達成したいのは、ボタンを指で押した後に一度呼び出されるようにすることです。うまくいくこともありますが、うまくいかないこともあります。メニューから選択する必要があるとしましょう。下ボタンや上ボタンを押すと完全に動くこともありますが、一度押すと2回動くこともあります。私はその問題を解決したいと思います。

グローバルのどこか:

int debounceDelay = 50;

ループ内のコード

a3StateDownButton = digitalRead(A3);
if (a3StateDownButton != a3DownButtonLastState) {
  a3DownButtonLastDebounceTime = millis();
}
if ((millis() - a3DownButtonLastDebounceTime) > debounceDelay) {
  if (a3StateDownButton != currenta3ButtonState) {
    currenta3ButtonState = a3StateDownButton;
    if (currenta3ButtonState == HIGH) {
      isDownButtonPressed = true;
      // do what ever you need to do when button is high
    } else if (currenta3ButtonState == LOW) {
      isDownButtonPressed = false;
    }
  }
}
a3DownButtonLastState = a3StateDownButton;

私が使用しているボタンはこれと非常によく似ており、ほとんど同じです。 ここに画像の説明を入力

ピンの 1 つに抵抗を接続しているだけですが、入力した値を忘れてしまいました。おそらく 2.2k です。

繰り返しますが、良いこともありますが、常に完璧であるとは限りません。また、 の値をdebounceDelayいじるとメニューに影響するのではないかと考えています。値を大きくすると応答が遅くなります。これはソフトウェアのデバウンスと呼ばれるものだと思います。ハードウェアのデバウンスにするために追加できるものがあるかもしれません。

4

0 に答える 0