1

Arduinoでフェードインおよびフェードアウトする8つのLEDがあります。次のコードでそれぞれを個別に制御しています。

  for(int fade1=0;fade1<=255;fade1+=1){
   analogWrite(8,fade1); 
   delay(10);
  }
  for(int fade1=255;fade1>=0;fade1-=1){
    analogWrite(8,fade1);
    delay(10);
  }

8 つの個別のピンのそれぞれに個別のフェード時間と遅延を割り当てることができるようにしたいので、8 つのライトすべてが同時にフェードインおよびフェードアウトし、無限にループします。ただし、プログラムで順番にキックオフさせることしかできません。

for ループ、ループ内のループなどのさまざまな配置で遊んでいますが、やりたいことを実行できないようです。誰かが私に紹介できるアイデアや例はありますか?

4

2 に答える 2

1

ループを 16 個ではなく、2 個に減らします。

  for(int fade1=0;fade1<=255;fade1+=1){
   analogWrite(8,fade1);
   analogWrite(9,fade1); 
   // etc.
   delay(10);
  }
  for(int fade1=255;fade1>=0;fade1-=1){
    analogWrite(8,fade1);
    analogWrite(9,fade1);
    // etc.
    delay(10);
  }

ポート 8 が書き込まれたときとポート 9 が書き込まれたときの時間の違いを観察することはできません。このコードは、LED を同時にフェード インおよびフェード アウトさせますが、個別にフェードさせたい場合がありますか?

この場合、各 LED のフェード値を個別に設定する必要があるため、初期値を使用してフェード値のベクトルを定義します。

  int fade[8] = {2, 0, 4,200,20,47,45,150};
  int dir[8]  = {1,-1, 1, -1, 1,-1, 1, -1};

  loop() {
      for (i = 0; i < 8, i++)
      {
         if ((fade[i] <= 0) || (fade[i] >= 255))
         {
            dir[i] *= -1;
         } else
           fade[i] += dir[i];
         }
         // + 8 for leds at ports 8 thru 15
         analogWrite(i+8, fade[i]);
      }
      delay(10);

   }

注意、私はこのコードを試していませんが、LED が互いに独立して動作しているように見えるのは良いスタートです。

于 2013-08-13T06:55:14.523 に答える
1

例の広範なリストが必要な場合は、私のブログをご覧ください。特にちらつきの除去セクションでは、20 個の LED を個別にフェードさせ、更新頻度を高くする方法の例がたくさんあります。

于 2013-08-14T20:44:13.533 に答える