2011年4月23日 星期六

不使用延遲的燈號閃爍程式 (Blink without delay)

實驗目的
讓一顆燈號閃爍,每隔一秒切換一次燈號,而且不使用 delay() 延遲函式達成目的。
材料
  • Arduino 主板 x 1
  • LED x 1
接線
  • 把 LED 接到 Arduino 板子上,LED 長腳(陽極)接到 pin13,短腳(陰極)接到 GND,如下圖:

image

程式

這是使用 delay() 延遲函式版的 Blink 程式(blink.pde),我們在「Arduino 筆記 – Lab1 Blinking a LED 」見過:

這支程式最大的問題,是當 delay() 函式在執行的時候,程式沒辦法做其它事情,CPU 就一直空轉著。如果你想讓燈號既可以閃爍,又要同時做其它事情,那麼就不能用 delay() 函式。

底下這支程式(BlinkWithOutDelay.pde)不使用 delay() 延遲函式,同樣可以達到讓燈號閃爍的目的:

程式所用的方法,是一直追蹤燈號狀態更新的時間,然後不斷檢查是否已超過間隔的時間,是的話,就切換燈號。運用這個方法,就可以讓 Arduino 同時做很多事情,變成一個簡單的多工系統(multitask system)。

延伸閱讀

2 意見:

許超然 提到...

請問那如果是要藉由偵測不同input控制同一顆馬達呢?

我現在想要讓同一顆馬達接受不同感測做某些事情,但是當觸摸時會強制讓馬達停止,請問這個多工的程式碼可以達到這樣的動作嗎?

感謝回答!

Cooper Maa 提到...

你說的問題,用一樣的方法應該是辦得到的