2016-08-18 40 views
-1

我有一個包含從一個Arduino溫度數據兩個數據庫...米利斯的Arduino的

我想將數據發送到一分鐘,這些數據庫,然後 後的發送數據的另一個數據基地,將其發送到下一個數據庫(後十條第一個數據基地的時間)

我下面的代碼:

int count = 0; 
for(int a = 1; a <= 10; a++) { 
    Cayenne.run(); 
    delay(60000); 
    count = count + 1; 
} 
if(count== 10) { 
    ToPostWStemp(); 
    count = 0; 
} 

但不發送任何東西,我不知道該怎麼做。 很多人都說我用millis()函數好得多,但我不知道我的Arduino上的代碼是如何工作的。

D.P. 「Cayenne.run」函數調用服務器的第一個函數,然後 「ToPostWStemp」調用第二個服務器函數。

謝謝!

+0

沒有足夠的信息來說明你做錯了什麼。上面的代碼是否在無限循環中運行?或者它是一個功能?什麼是「服務器的第一功能」?什麼是「服務器的最後功能」? – iheanyi

+0

好的,讓我更新完整的代碼 – Maclos

回答

0

如果我正確理解問題,聽起來好像你希望Cayenne.run()每分鐘被調用一次,而ToPostWStemp()每10分鐘調用一次。

要使用millis()來做到這一點,您可以簡單地跟蹤每個函數最後一次調用的時間,並將其與millis()的當前值進行比較,僅當經過的時間超過期望的時間間隔。事情是這樣的:

unsigned long cayenneTime = 0; 
unsigned long postWSTime = 0; 
void loop() 
{ 
    if (millis() - cayenneTime >= 60000) 
    { 
     // Do this every 60 seconds 
     Cayenne.run(); 

     // Keep track of the last time this code ran, so we know 
     // when to run it next time 
     cayenneTime = millis(); 
    } 
    if (millis() - postWSTime >= 60000 * 10) 
    { 
     // Every 10 minutes, do this 
     ToPostWStemp(); 

     // Keep track of the last time this code ran, so we know 
     // when to run it next time 
     postWSTime = millis(); 
    } 

    // Do other stuff here 
} 

注意米利斯()就會溢出,並重置爲0每4,294,967,295毫秒(約49天),因此,如果這將是一個長期運行的程序你要考慮這帳戶並對其進行調整。

+0

謝謝你的回答,你是個好朋友,現在我知道使用函數millis,謝謝你的例子,你的時間答案,傑夫。問候 – Maclos

+0

等一下......爲什麼你要在循環外寫const? – Maclos

+0

不確定你的意思。如果你的意思是我爲什麼在'loop()'函數之外聲明'cayenneTime'和'postWSTime',那是因爲在'loop()'中聲明它們會使它們成爲局部變量,這意味着它們的值每次都會被重置通過'loop()'。我也可以將它們聲明爲loop()內部的'static'局部變量,這會產生相同的效果,並且可能更乾淨,但這是編碼風格的問題。 –