2011年2月23日 星期三

Bitlash 範例 - 透過 Serial 通訊控制 LED

實驗目的

練習透過 Serial 通訊控制 5 顆 LED。利用 Bitlash 以下指令的方式來控制 LED 的開關。

這篇是「透過 Serial 通訊控制 LED」的重新改寫。我假設你已經看過「Bitlash 新手入門」這幾篇,對 Bitlash 有相當程度的了解。

軟體需求

你必須先把 Bitlash 函式庫安裝起來,安裝辦法請參考「Bitlash 新手入門」一文。

材料
  • 麵包板 x 1
  • Arduino 主板 x 1
  • LED x 5
  • 220 ohm 電阻 x 5
  • 單心線 x N
接線
  • 將 5 顆 LED 分別接到 pin 2 到 pin 6 這 5 支接腳 。LED 的接法為: 長腳(陽極)接到 pin 腳,短腳(陰極)串接一顆 220 ohm 電阻接到 GND

image_thumb2 

Arduino 程式

啟動 Arduino IDE 並打開 bitlashdemo 範例程式,bitlashdemo 的位置在 File > Examples > bitlash > bitlashdemo (須安裝 bitlash 函式庫並重啟 Arduino IDE 才看得到)。

你也可以用底下的這個 Bitlashdemo.pde,我在程式裏面加了中文註解。另外,由於這個實驗接了 5 顆 LED,所以我順便在 setup() 函式裏加了一個迴圈,把 pin 2 到 pin 6 這 5 支接腳初始化通通設成 output:

請編譯這支程式,然後 Upload 上傳到 Arduino 板子上。

開始使用

好了,Arduino 的程式已經完成了,接著就可以透過 Serial Port 以下指令的方式控制 LED 的開關了。

啟動你慣用的終端機程式並打開 Serial port,通訊速率請設定為 57600 bps,當你打開 Serial port 的時候,你首先會看到是 Bitlash 的看板訊息(Bitlash Banner):

image
▲ 我用的終端機程式是 Tera Term。如使用 Serial Monitor,換行符號記得要選 "Carriage Return"。

實驗的目的是透過 Serial 通訊控制 LED 的開關。要打開 LED,只要直接設定 d2 到 d6 腳位變數就可以了,作用就跟 Arduino 的函式 digitalWrite(pin, 1) 一樣:

> d2=1
> d3=1

▲ 打開 d2 和 d3 上的 LED。> 為指令提示符號(Command Prompt)

把腳位變數設成 0 會關掉 LED:

> d2=0

▲ 關掉 d2 上的 LED

要把 5 顆 LED 全部關掉,你只要像底下這樣寫個巨集(Bitlash function):

> function turnoffall {i=2;while i<=6 {dw(i,0); i++;}}
saved

▲ 關掉 d2 到 d6 的 LED

然後呼叫 turnoffall 就可以把 5 顆 LED 都關掉:

> turnoffall

▲ 呼叫 turnoffall 巨集關掉 d2 到 d6 上的 5 顆 LED

就這樣,你已經完成了實驗。

在「透過 Serial 通訊控制 LED」的練習裏,我們是自己用 Serial Library 來讀取 Serial port 的資料,然後再根據 Serial 輸入進來的字元 (字元 1 到 5)來決定不同顆 LED 的開關,並呼叫 digitalWrite() 函式實際開關 LED。一樣是透過 Serial 通訊控制 LED,但是跟自行用 Serial Library 比起來,使用 Bitlash 簡單多了。

在 startup 巨集初始化腳位

在這個實驗裏,我們把 pin 2 到 pin6 腳位初始化的 code 寫在 Bitlashdemo.pde 裏,其實你也可以寫在 startup 巨集裏,就像這樣:

> function startup {i = 2; while i<=6 {pinmode(i,1); i++;}}

save

▲ startup 巨集會在開機的時候自動執行

寫個巨集開 LED

就像函式一樣,Bitlash 的巨集也可以傳遞參數。像底下這樣,我們可以寫個可打開指定 LED 的 turnon 巨集:

> function turnon {if arg(0)==1 && arg(1)>=2 && arg(1)<=6 dw(arg(1),1);}
saved

▲ arg(0) 是參數數量(count of arguments),arg(1..n) 是參數

然後用 turnon 巨集來打開指定的 LED,例如:

> turnon(2)
> turnon(3)

▲ 打開 d2 和 d3 上的 LED

寫成巨集讓動作變得有意義多了。

動動腦

請用 Bitlash 重新寫一遍「Arduino 筆記 – Lab5 LED Bar Graph」 這個實驗的程式。

延伸閱讀

0 意見: