0

以下に投稿するコードでは、RGB LED を 0 から 255 にフェードさせてから、無限ループで 0 に戻すことができませんか?

現時点では、大きくなってフェードアウトしますが、フェードアウトせず、少し点滅しますが、255 で再び完全にパワーアップします。

void setup()
{
 Serial.begin(9600);

pinMode(greenPin, OUTPUT);
pinMode(redPin, OUTPUT);
pinMode(bluePin, OUTPUT);

fade = 0;

}

void loop()
{

   while(fade < 256)
   {
    analogWrite(redPin, fade);
   delay(30);
   analogWrite(greenPin, fade );
   delay(30);
   analogWrite(bluePin, fade);
   delay(30);
   fade++;
   }
   while(fade > 0)
   {
      analogWrite(redPin, fade);
   delay(30);
   analogWrite(greenPin, fade );
   delay(30);
   analogWrite(bluePin, fade);
   delay(30);
   fade--;
   }
}
4

2 に答える 2

1

フェードがバイトの場合:

フェードは 256 -> 00 になります! したがって、2番目のループは「非常に短い」でしょう:-)

最初のループでのみ使用することをお勧めします:

while(fade < 255) 

その後、255 で停止します。例: 0xff

2 番目の while は正しく実行されるはずです。

于 2013-06-27T20:56:41.047 に答える
0

永遠に単一のループはどうですか:

fade = 0;
step = 1;
while(1)
   {
   step = fade == 0 ? 1 : (fade == 255 ? -1 : step);
   fade += step;
   analogWrite(redPin, fade);
   delay(30);
   analogWrite(greenPin, fade );
   delay(30);
   analogWrite(bluePin, fade);
   delay(30);
   }
于 2013-06-27T21:30:54.470 に答える