底下是「不使用延遲的燈號閃爍程式(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" 的訊息:
TimedAction 函式庫
如果你想讓某個活動或多個活動每隔一段時間就執行一次,你可以仿照上面的方法做,或者也可以使用 TimedAction 函式庫。你可以在這個頁面下載 TimedAction 函式庫。以前面的 blinkAction 和 serialAction 兩個活動為例,用 TimedAction 函式改寫後的程式(TimedActionExample.pde)如下:
使用 TimedAction 函式庫改寫後,程式碼變得好讀多了。
對了,在這個範例程式中,blinkAction 和 serialAction 所用的間隔時間(interval)都是 1 秒鐘,其實你可以把兩個活動的間隔時間設成不一樣的。
0 意見:
張貼留言