2014-10-03 91 views
0

我有一系列繼電器,我用Arduino控制電磁閥,控制水管周圍的水流。 繼電器1和3個高 等待13S 繼電器2和4個高 等待17S 繼電器1和3個低 等待13S 繼電器2和4低 等待:繼電器被在沿着此線有規律的間隔被切換300S 重複如何處理arduino和millis中的多個時間?

我開始用一個簡單的一系列延遲的命令是這樣的:

#include <DmxMaster.h> 

void setup() { 
    DmxMaster.maxChannel(8); 
} 

void loop() { 


    delay(300000); 
    DmxMaster.write(1,HIGH); 
    DmxMaster.write(7,HIGH); 

    delay(13000); 

    DmxMaster.write(2,HIGH); 
    DmxMaster.write(8,HIGH); 

    delay(17000); 
    DmxMaster.write(1,LOW); 
    DmxMaster.write(7,LOW); 

    delay(13000); 
    DmxMaster.write(2,LOW); 
    DmxMaster.write(8,LOW);  
} 

這其中大部分的作品,但我會看情況它會跳過一個或多個延遲線和跳躍的時間到下一個聖地EP。我開始看的最長延遲(300S)的米利斯功能,並與下面就來了,但我想知道如何實現此爲較短的延遲,如果這將是任何改善:

#include <DmxMaster.h> 
unsigned long currentTime; 
unsigned long loopTime; 

void setup() 
{ 
    DmxMaster.maxChannel(8); 
    currentTime = millis(); 
    loopTime = currentTime; 
} 
void loop() 
{ 
    currentTime=millis(); 
    if(currentTime >= (loopTime + 300000)){ 
     DmxMaster.write(1,HIGH); 
     DmxMaster.write(7,HIGH); 

     delay(13000); 
     DmxMaster.write(2,HIGH); 
     DmxMaster.write(8,HIGH); 

     delay(17000); 
     DmxMaster.write(1,LOW); 
     DmxMaster.write(7,LOW); 

     delay(13000); 
     DmxMaster.write(2,LOW); 
     DmxMaster.write(8,LOW); 

     loopTime = currentTime; 
    } 
} 

在此先感謝, 卡梅隆

回答

0

在我自己的項目中,我有相同類型的約束:我需要檢查傳感器,獲取數據,分析它們,並選擇在不同的時間間隔做什麼。

我找到的最佳解決方案是ChibiOS/RT。它是由意法半導體的Giovanni Di Sirio開發的實時操作系統(RTOS)。

它已被移植到Arduino上Bill Greiman,並在Github上提供:ChibiOS-Arduino

它使用非常簡單,記錄完備,內存和體積都很小。

我在一個機器人項目Moti中使用它,你可以看看如果你想,但比爾有很多great examples

它看起來可能起初過於矯枉過正,但一旦你習慣了它,你會想知道爲什麼你沒有早點使用它,並且每一個你將要工作的Arduino項目都將有一個新的維度。

希望這會有所幫助:)