我有一個關於在Arduino中運行循環的問題。我編寫了一個Arduino,以便它慢慢消失在LED中,我想添加一個在程序運行時閃爍的LED。我可以改變整個程序,並將LED閃爍在所有線路之間,但我想知道是否有辦法可以單獨完成?是否有可能在void setup()下運行一個循環,或者運行一個循環,然後繼續運行第一個循環,然後繼續下一個循環?在Arduino上運行程序時連續運行循環?
閃爍的光線當然不是很重要,但我只是好奇它是否可以完成。
我有一個關於在Arduino中運行循環的問題。我編寫了一個Arduino,以便它慢慢消失在LED中,我想添加一個在程序運行時閃爍的LED。我可以改變整個程序,並將LED閃爍在所有線路之間,但我想知道是否有辦法可以單獨完成?是否有可能在void setup()下運行一個循環,或者運行一個循環,然後繼續運行第一個循環,然後繼續下一個循環?在Arduino上運行程序時連續運行循環?
閃爍的光線當然不是很重要,但我只是好奇它是否可以完成。
我建議爲此使用msTimer2庫。
http://playground.arduino.cc/Main/MsTimer2
使用它的一個例子也可以在德國的Arduino論壇這裏最近的討論發現:
你並不需要了解德國。只需要編碼並嘗試一下。
謝謝!簡單的解決方案,效果很好 – 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。
謝謝你的答案! – kajdehoop 2013-02-18 11:19:32