我可以同时发送(而不是顺序)Arduino输出吗?

时间:2013-08-13 00:03:07

标签: for-loop arduino output

我有8个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循环的不同位置,循环内的循环等,但似乎无法让它做我想要的。有人可以推荐我的任何想法或例子吗?

2 个答案:

答案 0 :(得分: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);

   }

注意,我没有尝试过这段代码,但这是一个很好的开始,因为它们似乎彼此独立运行。

答案 1 :(得分:1)

如果您需要大量的示例列表,请查看我的博客。特别是在removing flicker部分,我有很多关于如何独立淡化20个LED并具有高更新频率的例子。