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

问题描述:

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

闪烁的光线当然不是很重要,但我只是好奇它是否可以完成。

+0

谢谢你的答案! – kajdehoop 2013-02-18 11:19:32

我建议为此使用msTimer2库。

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

使用它的一个例子也可以在德国的Arduino论坛这里最近的讨论发现:

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

你并不需要了解德国。只需要编码并尝试一下。

+0

谢谢!简单的解决方案,效果很好 – kajdehoop 2013-02-18 11:18:32

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

你不能有两个或多个独立的回路同时运行,但你可以实现像这样的东西同样的效果:

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