在Arduino上运行程序时连续运行循环?

时间:2013-02-17 13:59:40

标签: loops arduino

我有一个关于在Arduino中运行循环的问题。我编写了一个Arduino,以便它在LED中慢慢消失,我想在程序运行时添加一个闪烁的LED。我可以改变整个程序并让LED在所有线路之间闪烁,但我想知道是否有办法可以单独完成?是否可以在 void setup()下运行循环,或运行循环,然后继续运行第一个循环,继续运行第一个循环?

眨眼之光当然不是很重要,但我只是好奇是否可以做到。

3 个答案:

答案 0 :(得分:1)

我建议将msTimer2库用于此目的。

http://playground.arduino.cc/Main/MsTimer2

在德国Arduino论坛最近的讨论中也可以找到它的一个例子:

http://arduino.cc/forum/index.php?PHPSESSID=cf3a483ed1812def070ebeaae09691c3&topic=146086.msg1100336#msg1100336

您不需要了解德语。只需拿走代码并试一试。

答案 1 :(得分:0)

当然。最优雅的解决方案是独立于主运行循环设置定时器,并使用其中断处理程序向量来打开和关闭LED。通过这种方式,您可以精确控制闪烁的频率,并且您不必担心主循环的速度有多快(如果随着时间的推移添加或删除计算成本高昂的代码,则可能会发生相当大的变化)。

答案 2 :(得分:0)

您不能同时运行两个或更多个独立循环,但您可以通过以下方式实现相同的效果:

void do_stuff_0 ();
void do_stuff_1 ();

unsigned long last_millis_0 = 0;
unsigned long last_millis_1 = 0;

const unsigned long delay_0 = ...;
const unsigned long delay_1 = ...;

void loop ()
{
  now = millis();

  if ((now - last_millis_0) >= delay_0) {
    last_millis_0 = now;
    do_stuff_0 ();
  }
  if ((now - last_millis_1) >= delay_1) {
    last_millis_1 = now;
    do_stuff_1 ();
  }
  ...
}

这只是为了说明,你很可能想要使用一个抽象它的库,比如metro