質問: ### 前提・実現したいこと タイトル通りarduinoのプログラミングにて ボタンが押されてから、関数の内容を3回実行してから本文に戻し、再びボタンを押されるのを待つようにコードを書き換えたいです。 ### 発生している問題・エラーメッセージ 本文が下記だとスイッチを離した瞬間、関数の内容の実行が止まってしまいます。そのため、以下の該当のソースコードに示すように、スイッチが押されてからフラグを立て、そのフラグが立っている間は関数の中を実行するように改善しました。 ところが、現状では一度関数に飛ぶと、そこから本文に戻ってきても、フラグが立っている状態が維持されて、再び関数を実行しループに入ってしまいます。 そのため、関数を指定回数(例えば3回)実行してから、再び本文に戻りボタンプッシュ待機の状態にしたいです。 本文をすっきりさせたいので、できれば関数内でなんとかしたいのですが、関数の中からフラグを0にする手法もうまく浮かばず。。。 何か良いアイデア等ございましたらご教授おねがいいたします。 ``` if(digitalRead(button)==HIGH){sendData();} ``` ### 該当のソースコード ``` void loop() { if(digitalRead(button)==HIGH){buttonflag=1;} if(buttonflag==1){sendData();} } void sendData(){ for(i=0;i<3;i++){ 実行文; } } ``` ### 補足情報(言語/FW/ツール等のバージョンなど) Arduino IDE 1.8.0 Arduino M0 Pro
回答: こんにちは。 そのような場合は、ボタンのOFF→ONの変化とON→OFFの変化を捉えることが常套手段です。 OFF→ONへ変化した時だけsendData()を呼ぶイメージです。 loop()関数は繰り返し呼ばれ、最初の呼び出し前にbuttonflagがクリアされていると仮定すると、ちょっと手抜きですが下記のようなコードで出来ると思います。(何かミスしていたらごめんなさい。) ``` void loop() { if(digitalRead(button)==HIGH) { if(buttonflag==0) { buttonflag=1; sendData(); } } else { buttonflag=0; } } ```