Arduinoをはじめよう Example 03 B

本日はデバウンシング

回路は同じ

image

コード変更のみ

const int LED = 13;
const int BTN = 7;

int val = 0;
int stat = 0;
int old = 0;

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(BTN, INPUT);
}

void loop() {
  val = digitalRead(BTN);
  
  if (old == LOW && val == HIGH) {
    stat = 1 - stat;
  }
  
  old = val;
  
  if (stat == 1) {
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }
}

スイッチの前後は次のように分かれる

  • LOW LOW スイッチは押されてない
  • HIGH HIGH スイッチが押しっぱなし
  • LOW HIGH スイッチが押された
  • HIGH LOW スイッチが離された

押されてない(LOW)>押された(HIGH)の時だけステータスを変える

  if (old == LOW && val == HIGH) {
    stat = 1 - stat;
  }

たしかにスイッチのON/OFFによく追随する。
ただ、この動画だと一回ミスが起きる。

それは、
スイッチが押されるか押されないかの
ギリギリのところで、
HIGH LOW HIGH LOW となってるから