1

我有八个 LED,我正在使用 Arduino 淡入淡出。我使用以下代码单独控制每个。

  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);
  }

我希望能够为八个单独的引脚中的每一个分配一个单独的淡入淡出时间和延迟,因此所有八个灯同时淡入和淡出,并无限循环。但是,我只能让他们按照我的程序顺序启动。

我一直在玩不同位置的 for 循环、循环内的循环等,但似乎无法让它做我想要的。有人可以向我推荐任何想法或示例吗?

4

2 回答 2

1

不要有 16 个循环,而是将它们减少到两个:

  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 回答