「Arduinoをはじめよう」その4 - プッシュボタンを押したらLEDが点灯、もう一回押したら消える
前回まではプッシュボタン押したときに点滅し続ける、離したら消える、ってを作ってました。今回は一回プッシュボタン押したら点灯し続け、もう一回押したら消える。また押したら点灯する。ってのを作ります。
コードは以下。
// ボタンを押したら点灯、もう一回押したら消える(はず、その3) // ボタンの状態が変化(オフからオン、オンからオフ)したときのみstateを変更する // バウンシング(ボタンが完全に押されていない状態)が生じるが50ms遅延させることで問題を解消 const int LED = 13; const int BUTTON = 7; int val = 0; // 入力ピンの状態を記憶しておく用 int old_val = 0; // 前回の入力ピンの状態を記憶 int state = 0; // LEDの状態(0ならオフ、1ならオン) void setup() { pinMode(LED, OUTPUT); pinMode(BUTTON, INPUT); } void loop() { val = digitalRead(BUTTON); // ボタンの状態が変化したか? if ((val == HIGH) && (old_val == LOW)) { state = 1 - state; delay(50); // バウンシング解消用の遅延 } old_val = val; if (state == 1) { digitalWrite(LED, HIGH); } else { digitalWrite(LED, LOW); } }
ボタンが完全に押されていない、中途半端な状態を「バウンシング」っていうらしい。
それによって挙動がちょっと変になる時がある。
1度押したら着く↔1度押したら消える
の繰り返しになって欲しいのにそうならなかったり。
で、10msから50msの遅延を入れると解消するって書いてあったんだが、それでもうまくいかない時がある。
なんでかはわからないからまあ放おって置こう。そのうちわかるだろう。