プログラム例)
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行はループが高速に回転しているため、待機させることによって、スイッチが反応しない時間をつくっています。
繰り返さない原因はおそらくスケッチにあると思います。
色々と試してみてください。
今後ともよろしくお願いいたします。
管理者様
早いご回答ありがとうございました。とりあえず、ご指示通りにコードをコピペして実行致したところ、仰る通りに何の問題もなく繰り返し実行できました。ありがとうございました。コードでどこが違っているかの検証は時間が無かったため、また後日行いご報告させて頂きます。まずはお礼まで。ありがとうございました。
ご連絡ありがとうございます。
とりあえず解決したようですね。
また、原因等わかりましたら、投稿していただくと他の方も参考にできます。
よろしくお願いいたします。