本日はデバウンシング
回路は同じ
コード変更のみ
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 となってるから