在看完前一篇的「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 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 意見:
張貼留言