2013-06-28 196 views
0

好的,我刚刚钻进了一个Arduino的编程,目前我有一个基本的闪烁功能以及一个RGB LED程序,可以将LED变为蓝色,绿色和红色。我有2个LED是一个简单和基本的黄色LED,应该可以作为“工作状态”的指示器。还有一个LED是RGB。虽然我想让黄色指示灯不断闪烁,但现在我希望RGB通常可以通过它的颜色进行转换。 如何让我的代码能够同时运行两个进程?C++ Arduino,一次运行两个循环?

回答

2

喜欢的东西:

int timekeeper=0; 
while (1) 
{ 
    do_fade(timekeeper); 
    if (timekeeper%100==0) { 
     do_blink_off(); 
    } 
    if (timekeeper%100==50) { 
     do_blink_on(); 
    } 
    delay(10); 
    timekeeper++; 
} 

这是从内存中完成,所以你的里程可能会有所不同。 我已经将计时器传递给了do_fade(),因此您可以计算出淡入淡出的程度。 do_fade()会更新淡入淡出,然后立即返回。 do_blink_on()和do_blink_off()会类似 - 改变你需要改变的东西,然后返回。在这个例子中,do_fade()将每10毫秒调用一次,do_blink_off()每秒一次,do_blink_on()每秒一秒后调整一次(so on,1/2 second,off,1/2 second,on,1/2秒...)

+0

看起来不错。我唯一需要补充的是,如果您的时间安排不相关,您不受限于使用单个计数器 - 您可以独立管理多个计数。如果你在50点闪烁,你也不需要进行模数,当你闪烁时,你也不需要模数。 – paddy

+0

如果我要有独立的时钟,我会在每个函数中创建静态(并将do_blink_on/off合并为一个)。我确实认为这是一个答案,但我认为这可能会太过先进,因为谁需要问上述问题。 –

1

AMADANON的答案会起作用,但请记住,执行多个任务的首选方式是使用定时器中断。例如,如果您希望代码在淡入淡出后执行其他操作,则其他函数的计时会干扰LED闪烁。为了解决这个问题,你可以使用内置于Arduino中的定时器。

在后台,一个计时器正在计数,当它达到某个值时,它会重置计数器并触发中断服务程序,这是您打开/关闭LED的位置。

以下是有关使用计时器闪烁的LED教程中断: http://www.engblaze.com/microcontroller-tutorial-avr-and-arduino-timer-interrupts/