2011年4月23日 星期六

millis() 函式簡介

millis() 函式簡介

millis() 函式會回傳 Arduino 從開始執行程式一直到目前為止的千分之一秒數值(number of milliseconds),這個數值在大約 50 天後會溢位(overflow),屆時會從 0 開始計數。

範例程式

底下是一支範例程式(millis.pde),程式邏輯很簡單,每間隔一秒印出一次 millis() 的回傳值:

下圖是程式執行結果:

image
▲ 每隔一秒印出一次 millis() 的回傳值,單位是千分之一秒(millisecond)

程式利用 delay(1000) 產生 1000 個 milliseconds 的延遲。你可能會發現,緊鄰的兩個數值,它們之間的差並非正好 1000,總是會比 1000 多出一點點,例如 2021 – 1011 = 1010,而 3032 – 2021 = 1011,這是因為 Serial.print() 印資料需要一些時間。

以通訊速率 9600 bps 而言,一般來說,要傳輸一個字元,需要 10 * (1/9600) 秒,大約是 1.04 個 miliseconds。一個字元的傳輸,除了 8 個 data bits 外,還會加上通訊所需的 start bit 和 stop bit。所以,如果要用 Serial.print() 印出 10 個字元,那麼成本就是要 10 * 1.04 = 10.4 ms 左右的時間。

另外一個與 millis() 相關的函式為 micros() 函式,millis() 函式回傳的是從開始執行程式一直到目前為止的千分之一秒數值,而 micros() 函式回傳的則是百萬分之一秒的數值(number of microseconds)。

延伸閱讀

0 意見: