2011年2月20日 星期日

Arduino 筆記 – bitlash 基本要素簡介(1)

在看完前一篇的「bitlash 新手入門」之後,相信你已經會用 bitlash 下指令做一些簡單的事情了,例如讀取數位或類比接腳(digital or analog pins)的讀值、控制 LED 燈號、甚至是搭配繼電器控制家電的開關等,你可能也已經在思考要怎麼運用巨集(Bitlash Functions)來把一些工作自動化(Automation),只是不清楚 bitlash 的巨集有多少能力,可以做到什麼樣的程度。

其實 bitlash 很有彈性,只要好好的利用,它會帶給我們很大的方便。現在大可不必感到困擾,一步一步來,在正式開始使用 bitlash 前,我們還是按部就班,先從認識 bitlash 的基本要素開始。

bitlash 基本要素

本篇將帶你快速地看一遍 bitlash 的基本要素,包括:

  • 數值變數(Numeric variables)
  • 腳位變數(Pin variables)
  • Bitlash 指令(Commands),以及
  • 內建函式(Build-in functions)

有件事得說明,bitlash 的語言是一個類似 C 的語言(C-like Language),我假設你對 C 語言有一些了解,所以不會花太多篇幅講解指令的語法,這篇只是摘要整理,希望可以幫助你快速的瀏覽一遍 bitlash 的要素。如果你需要詳細的參考資料,請上 bitlash 網站查詢。本文的內容是根據 Bitlash 2.0 寫成的。

數值變數(Numeric variables): a-z

你有 a 到 z 總共 26 個 32-bit 的整數變數可以使用,這 26 個變數初始值都是 0。什麼時候會用到這些變數呢?一般是在 if, switch 或 while 迴圈等控制結構裏,例如:

> i=10; while i-->0 print i;
9
8
7
6
5
4
3
2
1
0

▲ 印出從 9 到 0 的整數

也可以拿來做算術運算:

> a = 5
> b = 6
> print a*6+20
50

▲ 5 * 6 + 20 = 50

如果 d2 到 d6 這 5 支接腳上面都有接 LED,那我們就可以看誰唱歌有沒有得五燈獎:

> print d2,d3,d4,d5,d6
1 1 1 1 1
> t = d1 + d2 + d3 + d4 + d5
> print t
5
> if (t==5) print "All lights are turned on!"
All lights are turned on!

▲ 計算 d2 到 d6 這 5 支數位接腳是 1 的共有幾支

腳位變數(Pin Variables)

你可以透過 a0, a1, a2, …, an 和 d0, d1, d2, …, dn 這些變數直接存取類比和數位腳位(analog 和 digital pins)。用腳位變數(Pin Variables)直接讀取接腳的讀值,像這樣:

> print a0, d13                     // 等於 analogRead(0) 與 digitalRead(13)
268 1
> x=d13                             // x = digitalRead(13)
> print x                    
1

▲ 利用腳位變數直接讀取類比與數位腳位,相當於 analogRead() 與 digitalRead() 的簡寫

你對數位腳位變數做設定的動作,便會打開或關掉腳位,作用就像 digitalWrite() 一樣:

> d13 = 1                        

▲ 打開 pin 13 上的 LED

指令(Commands)

底下為 Bitlash 的指令表,關於指令的詳細說明,請見 Bitlash 指令參考手冊

指令名稱 語法 說明
boot boot 重開 Arduino。啟動的時候會跑 startup 巨集,假如有定義的話
function function name body 定義巨集(Bitlash function)
help help 顯示說明
if if expr body1 [else body2] 流程控制
ls ls 條列已定義的巨集(Bitlash function)
peep peep 印出 eeprom 的內容
print print expr 顯示運算式的結果
ps ps 條列在背景執行中的工作,ps 為 process status 的縮寫
rm rm name 刪除(remove)巨集(Bitlash function)
run run name [,interval] 在背景中執行一個巨集
stop stop [tasknum] | stop * 停止指定的工作
switch switch expr body 流程控制
while while expr body 流程控制

▲ Bitlash 指令表

內建函式(Build-in Functions)

Bitlash 提供了一些內建的函式,內建函式大部份直通 Arduino 的函式,可以讓我們直接控制 Arduino 的硬體,例如:ar() 通 analogRead(), aw() 通 analogWrite(), delay() 通 delay(), dr() 通 digtalRead(), dw() 通 digitalWrite() 等。

底下為 Bitlash 的內建函式表,關於內建函式的詳細說明,請見 Bitlash 內建函式參考手冊

函式名稱 說明 (直通 Arduino 的函式)
abs(x) 取絕對值
ar(apin) 等於 analogRead(apin)
aw(dpin, value) 等於 analogWrite(dpin, value)
baud(pin, baud) 設定腳位的通訊速率,詳見 printing
bc(val, bitnum) 相於 bitClear(val, bitnum)
beep(pin, frequencyhz, durationms) 讓 pin 接腳以指定的頻率持續切換一段時間
br(val, bitnum) 等於 bitRead(val, bitnum)
bs(val, bitnum) 等於 bitSet(val, bitnum)
bw(val, bitnum, bitval) 等於 bitWrite(val, bitnum, bitval)
constrain(val, min, max) 等於 constrain(val, min, max)
delay(miliseconds) 等於 delay(miliseconds)
dr(dpin) 等於 digitalRead(dpin)
du(microseconds) 等於 delayMicroseconds(microseconds)
dw(dpin, bval) 等於 digitalWrite(dpin, bval)
er(addr) 等於 EEPROM.read(addr)
ew(addr, value) 等於 EEPROM.write(addr, value)
free() 傳回 RAM 記憶體可用空間
inb(reg) 傳回 AVR 處理器 8-bit 暫存器的內容
max(a, b) 等於 max(a, b)
millis() 等於 millis()
min(a, b) 等於 min(a, b)
outb(reg, value) 設定 AVR 處理器暫存器的內容
pinmode(pin, mode) 等於 pinMode(pin, mode)
pulsein(pin, value, timeout) 等於 pulseIn(pin, value, timeout)
random(max) 等於 random(max)
snooze(snoozems) 打盹一段時間

▲ Bitlash 內建函式表

延伸閱讀

0 意見: