プログラム例)
D8番に接続されたタクトスイッチS1を押すとLEDの点灯数が1個ずつ増えていくプログラム。全点灯時にS1を押すと全部消灯させる。タクトスイッチS1は押した時にLOWとなるように接続し、10kΩの抵抗器でプルアップしておく。
//SW1(D8番)が押されるとLEDの点灯数が増えるプログラム //5回目が押されると全部消灯させる int a = 0 ; int i ; void setup() { pinMode(8, INPUT); // 入力に設定 pinMode(10, OUTPUT); // 出力に設定 pinMode(11, OUTPUT); // 出力に設定 pinMode(12, OUTPUT); // 出力に設定 pinMode(13, OUTPUT); // 出力に設定 } void loop() { if(digitalRead(8)==LOW){a++;} //押されたときにaに1を加える while(digitalRead(8)==LOW){ //離すのを待つ if(digitalRead(8)==HIGH){break;} //上りエッジで進む } if(a==1){digitalWrite(10,HIGH);} //aが1の時は10番点灯 if(a==2){digitalWrite(11,HIGH);} //aが2の時は11番点灯 if(a==3){digitalWrite(12,HIGH);} //aが3の時は12番点灯 if(a==4){digitalWrite(13,HIGH);} //aが4の時は13番点灯 if(a==5){ //aが5になった時の処理 a = 0; //aをゼロにする for(i=10;i<=13;i++){ //繰り返し処理で全消灯 digitalWrite(i,LOW); } } delay(100); //待機 } //ここまで
サイトを最初から拝見してArduinoを勉強させて頂いています。分り易く簡潔な記述ありがとうございます。
一点、お尋ねがあります。本ページのプログラムを実行したところ、一度は各点灯~全消灯できるのですが、二度目以降同じことを繰り返そうとしても各点灯が起きません。自分の理解ではloop関数で記述されているので、問題なく繰り返しできると思っているのですが、違うのでしょうか?勿論、再度プログラムを書き込むと同じ事は一度のみ実行可能です。
初心者さん 様
サイトへのご訪問ありがとうございます。
動画の方は初代1号機ですが、現行の「基礎学習シールド」で試したところ、繰り返し点灯しました。
「自分の理解ではloop関数で記述されているので、問題なく繰り返しできると思っているのですが、違うのでしょうか?」のご指摘の通りです。
一度、サンプルスケッチをそのままコピぺしてコンパイル・実行してみてはいかがでしょうか。
なお、30行のdelay文を入れないと動作が不安定になります。この1行はループが高速に回転しているため、待機させることによって、スイッチが反応しない時間をつくっています。
繰り返さない原因はおそらくスケッチにあると思います。
色々と試してみてください。
今後ともよろしくお願いいたします。
管理者様
早いご回答ありがとうございました。とりあえず、ご指示通りにコードをコピペして実行致したところ、仰る通りに何の問題もなく繰り返し実行できました。ありがとうございました。コードでどこが違っているかの検証は時間が無かったため、また後日行いご報告させて頂きます。まずはお礼まで。ありがとうございました。
ご連絡ありがとうございます。
とりあえず解決したようですね。
また、原因等わかりましたら、投稿していただくと他の方も参考にできます。
よろしくお願いいたします。