2

我有一个关于在 Arduino 中运行循环的问题。我已经对 Arduino 进行了编程,使其慢慢淡入 LED,我想添加一个在程序运行时闪烁的 LED。我可以更改整个程序并让 LED 在所有行之间闪烁,但我想知道是否有一种方法可以单独完成?是否可以在void setup()下运行一个循环,或者运行一个循环,然后继续运行下一个循环,同时继续运行第一个循环?

闪烁的灯当然不是很重要,但我只是好奇它是否可以做到。

4

3 回答 3

1

我建议为此目的使用 msTimer2 库。

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

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

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

你不需要懂德语。只需获取代码并尝试一下。

于 2013-02-17T14:24:42.517 回答
0

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

于 2013-02-17T14:07:00.157 回答
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

于 2013-02-17T14:12:25.313 回答