2011年2月18日 星期五

Arduino 筆記 - bitlash 新手入門

什麼是 bitlash?

Bitlash 是一個 Open Source 的 Arduino Shell,作者是 Bill Roy。它是一個指令直譯器(Command Line Interpreter),可以讓你透過 serial port 下指令跟 Arduino 互動,它同時也是一個簡易的劇本語言(Scripting Language),可以讓你用類似 C 的語法寫程式(或稱 Script -- 劇本)。

如果你有聽過 DOS Shell 或 UNIX 的 bash, csh,相信你一定聽得懂,因為 Bitlash 其實就是類似 DOS, bash, csh 的東西,只不過它是在 Arduino 上面跑的,而且它很小,只用了 14K 左右的 Flash 空間。

特色
  • 交談式的命令環境:我們可以用 "Serial Monitor" 或超級終端機, Tera Term 這類終端機程式,透過 serial port 輸入指令,Bitlash 會負責解譯並且執行指令,假如輸入的指令有回傳值的話,Bitlash 它會回覆你執行的結果。
  • Bitlash Functions:就像巨集一樣,Bitlash 可以讓我們任意組合 Bitlash 指令並為它取一個名字,Bitlash 會把它儲存起來變成一個 Bitlash function。只要有需要,我們隨時都可以執行已經寫好的 Bitlash functions,經由這種方式把一些工作自動化 。
  • 內建函式(Build-in Functions):Bitlash 提供了一些內建的函式,可以讓我們直接控制 Arduino 的硬體,內建函式大部份直通 Arduino 的函式,例如:ar() 通 analogRead(), aw() 通 analogWrite(), delay() 通 delay(), dr() 通 digtalRead(), dw() 通 digitalWrite() 等。
  • 自訂函式(User Functions):Bitlash 也允許我們利用 addBitlashFunction() 增加自己的函式。

註:因為 Bitlash Functions 與內建函式很容易造成混淆,建議你把 Bitlash Function 當作巨集看待,不然的話,有時候它們兩個可能會讓你腦筋一時轉不過來。

安裝 bitlash

官網下載 Bitlash,把檔案解壓縮放到 Arduino 的 Libraires 資料夾底下即可:

image
▲ bitlash library 的安裝

安裝完後的資料夾結構如下:

image
▲ bitlash 資料夾結構

執行 bitlashdemo 範例程式

雙擊 Arduino.exe 啟動 Arduino IDE,點選 File > Examples > bitlash > bitlashdemo 打開 bitlashdemo 範例程式:

image 
▲ bitlashdemo 範例程式

這篇文章只是個開始,目前你只需要知道怎麼使用 bitlash 就好,不必知道這段程式在做什麼。所以,儘管編譯這支程式並上傳到 Arduino 就對了。

上傳完畢後,你就可以跟 Arduino 建立連線,準備開始學習使用 Bitlash 了。

啟動終端機程式並與 Arduino 建立連線

啟動你慣用的終端機程式並打開 Serial port,通訊速率請設定為 57600 bps。

image 
▲ 如果你使用 Serial Monitor,記得換行符號要選 "Carriage Return" 這個選項。

我用的終端機程式是 Tera Term,當我打開 Serial port 的時候,印入眼簾的是 Bitlash 的看板訊息(Bitlash Banner):

image

如果你也看到了同樣的訊息,那麼恭禧你,你已經準備好了。Bitlash 已經在等待你的指令,而 > 是指令提示符號(Command Prompot)。

下指令控制 LED

首先,有件事你一定要先知道,Bitlash 透過 a0, a1, a2, … 和 d0, d1, d2, … 這些變數,讓我們可以直接存取類比和數位腳位(analog 和 digital pins)。你可以用這些變數讀取並印出接腳的讀值,像底下這樣:

> print d13

0

▲ 印出 digital pin 13 的狀態,Bitlash 告訴我們 d13 的狀態是 0。

> print a0

168

▲ 印出 analog pin 0 的狀態。記得 > 是 command prompt。

我們知道 Arduino 板子上 pin 13 線路上有顆 LED(標記 為 L) 。要怎麼用 Bitlash 打開這顆 LED 呢?非常簡單!

首先,因為數位腳位(digital pins)預設都是 input,所以你必須先把 pin 13 設成 output (1 代表 output, 0 代表 input):

> pinmode(13,1)

▲ 接腳很少既當 input 又當 output 使用,通常在 Arduino 開機後只要呼叫一次 pinmode() 設定完成就行了

接著輸入底下這條指令:

> d13 = 1

就可以把 pin 13 上的 LED 打開:

image
▲ pin 13 上的 LED (L)

夠簡單吧?那要怎麼關掉 LED 呢?不用我說,我相信你一定會。

bitlash 版的 Blink 程式

上面這支程式是 Blink 程式(Blink.pde,可以在 File > Examples > 1.Basics > Blink 找到),是大家 Arduino 入門的第一支程式,它的功能是讓 pin 13 上的 LED 燈號不斷閃爍,每隔一秒鐘切換一次燈號。底下教你用 Bitlash 做出同樣的功能:

1) 先定義一個 toggle13 的 function,如下:

> function toggle13 {d13=!d13;}

2) 接著用 run 指令跑 toggle13:

> run toggle13,1000

就這樣,你已經完成了跟 Blink 程式一樣的功能了。上列的 run 指令,會讓 toggle13 每一秒鐘跑一次。

記得要先跑一次 pinmode(13,1) 把 pin 13 設成 output。

如果要把它停下來,只要下個 stop 指令就好,每秒跑一次 toggle13 的工作會馬上停下來:

> stop

一切從 bitlashdemo 範本開始

大部份時候,我們只需要跑 bitlashdemo 範例程式就可以開始使用 bitlash,bitlashdemo 的位置在 File > Examples > bitlash > bitlashdemo:

image

底下幫 bitlashdemo.pde 加上中文註解(bitlashdemo.pde)。

其實 bitlashdemo.pde 程式很簡單,不過是呼叫 initBitlash() 和 runBitlash() 把 Bitlash 跑起來而已。

下一步

前面這支 Bitlash 版的 Blink 程式,確實達到了我們的目的,可以讓 LED 每秒閃爍一次,但是在 Arduino 重新開機後並不會自動執行,如何把 run toggle13,1000 的工作安排在開機的時候自動執行,請見下回分曉。

動動腦
  1. 請實際接上一些 LED, 可變電阻, 光敏電阻等簡單的電子裝置,然後練習用 bitlash 來存取這些電子裝置,例如讀可變電阻和光敏電阻的讀值和控制 LED 的開關。
  2. 我們可以在哪些場合應用 Bitlash 呢?
參考資料

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。