Arduino ボタン入力 INPUT_PULLUP

Arduinoで割込みを使わないでボタン入力を行いたい場合、ピンモードをINPUT_PULLUPに指定すると基板上の抵抗を減らすことが出来ます。その際にボタンを押した時に瞬間的に複数回のオンとオフが発生します。他の方のサイトではハード的に防ぐ回路なども紹介されていますが、ソフト側で対応したいと思います。それを防ぐために1度オンになった時にボタンをしばらくホールド(無効化)するようにしました。1度ボタンが押されたら約200ミリ秒ホールドします。ボタンを押したままにした場合は約200ミリ秒ごとに判定しますので、リピートも可能です。ボタンの反応感度は、hold_maxとdelay_timeの値で調整します。

const int pin_button  = 7;
const int hold_max = 10;
const int delay_time = 20;
int hold_count = 0;
int btn_status;

void setup() {
  Serial.begin(9600);
  pinMode(pin_button, INPUT_PULLUP);
}

void loop() {
  btn_status = digitalRead(pin_button);

  if (btn_status == LOW && hold_count == 0) {
    Serial.println("PUSHED!");
    hold_count = hold_max;
  }

  delay(delay_time);
  if (hold_count > 0) { hold_count--; }
}

関連記事

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です