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 呢?
參考資料

0 意見: