2011年4月24日 星期日

同時執行多個活動與 TimedAction 函式庫簡介

底下是「不使用延遲的燈號閃爍程式(Blink without delay)」這篇的程式,它的功能是讓一顆燈號閃爍,每隔一秒切換一次燈號,而且不使用 delay() 延遲函式:

我們來把程式碼整理一下。

整理與 Blink 活動相關的程式碼

首先,把 loop() 中跟控制燈號有關的程式碼抽取出來變成一個 check() 函式:

然後進一步從 check() 中把切換燈號的程式碼抽取出來變成一個 blink() 函式:

因為 currentTime 只是一個暫時變數,沒有多大的用途,所以我把它拿掉換成呼叫 millis(),讓程式碼變清爽一點。

加入第二個活動

接著加入第二個活動,讓程式在執行 Blink 活動的同時也可以存取 Serial Port,程式碼(twoActions.pde)如下:

簡單起見,我們讓第二個活動只是定時輸出一個簡單的訊息,而且跟 Blink 活動一樣,第二個活動執行的時間間隔一樣是 1 秒鐘(1000 miliseconds)。

好了,現在你已經讓 Arduino 可以同時執行兩個活動,一個是 blinkAction,另一個是 serialAction。如下圖,每當燈號在切換的時候,Serial Port 同時也會輸出一個 "Hello, time = xxxx" 的訊息:

image

TimedAction 函式庫

如果你想讓某個活動或多個活動每隔一段時間就執行一次,你可以仿照上面的方法做,或者也可以使用 TimedAction 函式庫。你可以在這個頁面下載 TimedAction 函式庫。以前面的 blinkAction 和 serialAction 兩個活動為例,用 TimedAction 函式改寫後的程式(TimedActionExample.pde)如下:

使用 TimedAction 函式庫改寫後,程式碼變得好讀多了。

對了,在這個範例程式中,blinkAction 和 serialAction 所用的間隔時間(interval)都是 1 秒鐘,其實你可以把兩個活動的間隔時間設成不一樣的。

延伸閱讀

0 意見: