質問: ### 前提・実現したいこと ボタンを押すと、LEDが点灯するArduinoのプログラムを作ろうとしています。 ### 発生している問題・エラーメッセージ ボタンを押したとき、点灯しないことがあります。 ``` エラーメッセージ ``` ### 該当のソースコード const int LED=13; const int BUTTON=7; int val=0; int old_val=0; int state=0; void setup(){ pinMode(LED,OUTPUT); pinMode(BUTTON,INPUT); } void loop(){ val=digitalRead(BUTTON); if((val==HIGH)&&(old_val==LOW)){ state=1-state; delay(10); } old_val=val; if(state==1){ digitalWrite(LED,HIGH); }else{ digitalWrite(LED,LOW); } } ### 試したこと 配線とボタンはすべて交換したためプログラムの問題だと思われます。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
回答: 「点灯しないことがある」というのは「点灯することもある」と理解します ということは、配線やスイッチのロジックの問題では無いと理解します y_waiwaiさんが仰っている通り、チャタリングの問題かと思いました スイッチによっては 20~30msecの間ばたつくものもあるようなので、もう少しdelayを長めに取ってみるのも一手かと思います あと、このコードだと HIGH と LOW を入れ替えた後、またすぐにスイッチの検出に行ってしまうような気がします そうすると、長めに押してしまった場合、せっかく HIGH になってもまたすぐに LOW になることもあるかもしれません 一旦、LEDを切り替えたら2~3secくらい待って(delay)、上のチャタリングを解決するために長くしたdelay分、気持ち長めにスイッチを押してみてはいかがでしょうか? 違ったらごめんなさい