2014-10-10 96 views
0

我想爲此函數添加一個定時器,以便每次讀取它時都會重新啓動,並且可以設置另一個函數在達到特定時間後執行serial.write。我們稱之爲空閒時間函數。我無法將此與閱讀ID綁定,因爲我有可能正在閱讀的28個ID。我想通過serial.write通過ASCII命令重置我的音頻播放器,如果沒有讀取超過180秒的iud ...建議?Arduino上的空閒時間函數

if(uid[0] == 0x64 && uid[1] == 0xBF && uid[2] == 0xD8 && uid[3] == 0x51) 
{ 
//pause at beginning 
    delay (500); 
//Serial.write("for Bässgen MM3210") 
    Serial.write("listplay 1 1"); 
    Serial.write(13); 
//pause at end 
    delay (3000); 
} 

回答

0

您可以從millis()調用中爲每個uid指定一個值。

它基本上計數從芯片開啓以來的毫秒數。這是存儲在一個很長的時間,所以它會重置爲零每80天左右,我認爲(我從來沒有離開它那麼長)

我這樣做的時間隨機數組寫的更快或更慢的基礎上多少件的數據在裏面。而不是使用delay()和計數循環,使用millis()允許我在特定時間跳入。

+0

millis()根據文檔在9小時後溢出。我也需要在每次讀取uid後重置它。 – Automa 2014-10-13 07:00:04

+0

http://arduino.cc/en/Reference/Millis顯示50天。每讀取一次uid,你所做的就是更新一個正在運行的變量(即:long prevMillis),然後在稍後的時間點測量時間,你可以使用prevMillis - Millis() – djUniversal 2014-10-13 14:13:40

+0

使用Millis()的好處是它會計數沒有像delay()那樣持有線程,所以如果你不想要的話,你不需要中斷。 50天的限制不應該成爲一個問題,因爲我相信這個長期會回到起點,所以只要你注意到代碼中的大部分比較方程式,它仍然會工作。 – djUniversal 2014-10-13 14:20:24