Project Description

相關的文章或研討會文獻已經相當多,本文僅以樂高 EV3 程式環境與其核心引擎 LabVIEW,輔以 NXC 文字式介面來說明圖形化程式設計對於小朋友學習程式這件事上的幫助。以上三個程式環境都是可控制樂高機器人的程式環境,各有勝場。(文:CAVEDU阿吉)

 

 
CAVE 想強調的是:沒有絕對好用的程式環境,如果有的話,早就一統天下啦!應該是根據您專案的需求,選擇合適的程式語言。再者,學生在開發專案時,常常是「因為我只會這個程式語言」,而非「選擇足以完成專案的程式語言」。前者當發現卡關的時候,通常木已成舟,要改也改不動捨不得,最後專案不了了之。
 
當我們使用某個程式語言時,我們已經隱含了接受該程式語言開發者的邏輯與思考架構。所以才會常常有這個問題「ㄟ?在別的語言,這裡是這樣寫的耶!」通常學生在學習程式設計時會遇到的困難有幾項:
 
1. 不會使用開發環境
2. 找不到指令
3. 不會除錯
 
簡單來說,圖形化程式設計的優點有以下:
 
1. 直觀,先決定大致上的執行順序再深入調整參數
2. 進入門檻低(進入門檻高的圖形化介面我想應該沒人要學…)
3. 使用資料線(data wire)來處理變數傳值
4. 顏色與線條形狀粗細可以代表很多事情,例如資料型態與維度
 
另一方面,圖形化程式介面常見的缺點有以下:
 
1. 程式畫面很容易變得很雜亂
2. 相同的功能,通常效率較差
3. 通常擴充性較低,例如要在 EV3 自訂一個模組就是大工程
4. 有時候簡單的四則運算算式反而用掉一大堆空間
 

程式可讀性

 
我們以B馬達轉兩秒來說,以NXC 來說是這樣寫的:
 
task main(){
OnFwd(OUT_B, 75);
Wait(2000);
Off(OUT_A);
}
一般而言,學生初次開始自行輸入程式碼時會碰到的問題有:
1. 大小寫未注意
2. 分號常忘記
3. 括號漏掉
 
以EV3 圖形化介面來說是這樣寫的:(程式碼在本頁最下方
從指令的圖示可看出與馬達有關,電力為75,轉動秒數為2秒。所有參數都是點選後再輸入數值即可。
以LabVIEW 來說是這樣寫的,粉紅色的線是 sequence beam代表執行的順序,當指令之間沒有資料傳遞時可以用這種方式來強制規定執行順序。
 


 
資料線範例1:馬達控制
 
接著我們要來深入談資料線,這應該是圖形化程式介面的一大優點,透過不同顏色的資料線可以明確表示資料的型態與流向,使用者可由資料的流向來看出程式執行的順序,使用上相對親民多了。(文字介面表示:我也有顏色區別不同的資料型態啊!但是在呈現資料的走向上就還是輸圖形化介面一點點…)
 
在NXC中,我們可以另外宣告一個副函式 move,它有兩個參數 power 與 time,當被呼叫的時候,它會根據從外部在需要的時候呼叫它,並透過傳值來得到不同的執行結果。但學生通常對於數值是如何從 main() 飛到 move() 不太理解。
 
sub move(int power, int time){
OnFwd(OUT_A, power);
Wait(time);
Off(OUT_A);
}
task main(){
move(75, 1500);  //第一次呼叫move
move(-50, 2000);//第二次呼叫move
}
 
另外,如果我們要用光感測器來控制馬達轉速,也就是光值愈高(愈亮)馬達轉愈快,以NXC 來說,可以這樣寫:
 

task main(){
SetSensorLight(S1);  //將光感測器接在輸入端1
while(true){
s = Sensor(S1);   //取得光感測器值
OnFwd(OUT_B, s); //將光感測器指定為馬達轉速
}
}
 
以EV3 圖形化介面來說,是這樣寫的:(程式碼在本頁最下方
 
上圖:將顏色感測器的值直接指定為D馬達的轉速,範圍為0~100。轉動區間為On,亦即EV3主機可負擔的最小執行區間。
 
下圖:將顏色感測器的值直接指定為D馬達的轉速,範圍為0~100。轉動區間為On for Seconds,在此設定為0.2秒,亦即每次迴圈都一定會執行0.2秒。


同一筆資料也可以同時給兩個單位來使用,如下圖(程式碼在本頁最下方)。同樣一筆光感測器值,除了直接指定為B馬達轉速之外,還另外加個負號之後再指定為C馬達轉速。
 


 
我們另外以LabVIEW 來舉例,使用一個 Slide controller 來控制 B馬達的電力,下圖中我們可以看到左側 Slide controller 輸出的值(-100~100)同時給數值顯示器與B馬達的電力。
 


 

資料線範例2:顯示感測器值


本範例是使用LabVIEW 來說明不同資料型態的呈現方式,您可以看到程式中使用了不同的顯示元件來呈現資料,相當豐富。EV3 軟體中雖然沒有像 LabVIEW一樣的 Front Panel 來進行視覺呈現,但還是有 Datalogging 頁面來觀看並記錄您的資料。
 

 

 
附錄:EV3中的資料接口與資料線說明,共有邏輯、數值、文字、數值陣列與邏輯陣列等五種格式。您可看到陣列的線條會比純量來得粗,這在LabVIEW中也是一樣的概念。如下圖中是一個九九乘法表的LabVIEW程式,最終的Array為二維數值陣列
 
 
EV3與上一代NXT相比,多了陣列的支援,在大筆資料的應用上會更加方便,日後會另以專文介紹。