回路は同じ。
スイッチを押すと点灯し続け、
もう一度押すと消灯するように、
コードを書きかえた。
スイッチを押すごとに点灯し消灯する
const int LED = 13; const int BTN = 7; int val = 0; int stat = 0; void setup() { pinMode(LED, OUTPUT); pinMode(BTN, INPUT); } void loop() { val = digitalRead(BTN); if (val == HIGH) { if (stat == 0) { digitalWrite(LED, HIGH); stat = 1; } else { digitalWrite(LED, LOW); stat = 0; } } }
stat の on と off は次のように書けると
stat = 1 - stat
引き算を減らすためではなく、
状態を入れ替えるのに使うとは。
かっこいい。 覚えとこう。
書き直してみた
const int LED = 13; const int BTN = 7; int val = 0; int stat = 0; void setup() { pinMode(LED, OUTPUT); pinMode(BTN, INPUT); } void loop() { val = digitalRead(BTN); if (val == HIGH) { stat = 1 - stat; } if (stat == 1) { digitalWrite(LED, HIGH); } else { digitalWrite(LED, LOW); } }
何度か押すとスイッチが反応しなくなる
何度かボタンを押すうちに、聴かなくなる。
バウンシングと呼ばれる。
ボタンが押されてる間に、
ループが何回も回るため、
stat が激しく書き換わり発生。