SWを押すと点灯したLEDが増える

プログラム例)
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);                       //待機
}
//ここまで

“SWを押すと点灯したLEDが増える” への4件の返信

  1. サイトを最初から拝見してArduinoを勉強させて頂いています。分り易く簡潔な記述ありがとうございます。

    一点、お尋ねがあります。本ページのプログラムを実行したところ、一度は各点灯~全消灯できるのですが、二度目以降同じことを繰り返そうとしても各点灯が起きません。自分の理解ではloop関数で記述されているので、問題なく繰り返しできると思っているのですが、違うのでしょうか?勿論、再度プログラムを書き込むと同じ事は一度のみ実行可能です。

    • 初心者さん 様

      サイトへのご訪問ありがとうございます。
      動画の方は初代1号機ですが、現行の「基礎学習シールド」で試したところ、繰り返し点灯しました。
      「自分の理解ではloop関数で記述されているので、問題なく繰り返しできると思っているのですが、違うのでしょうか?」のご指摘の通りです。
      一度、サンプルスケッチをそのままコピぺしてコンパイル・実行してみてはいかがでしょうか。
      なお、30行のdelay文を入れないと動作が不安定になります。この1行はループが高速に回転しているため、待機させることによって、スイッチが反応しない時間をつくっています。
      繰り返さない原因はおそらくスケッチにあると思います。
      色々と試してみてください。
      今後ともよろしくお願いいたします。

  2. 管理者様

    早いご回答ありがとうございました。とりあえず、ご指示通りにコードをコピペして実行致したところ、仰る通りに何の問題もなく繰り返し実行できました。ありがとうございました。コードでどこが違っているかの検証は時間が無かったため、また後日行いご報告させて頂きます。まずはお礼まで。ありがとうございました。

    • ご連絡ありがとうございます。
      とりあえず解決したようですね。
      また、原因等わかりましたら、投稿していただくと他の方も参考にできます。
      よろしくお願いいたします。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*