文/曾吉弘(CAVE教育團隊)
本篇文章將使用三個樂高NXT 觸碰感測器來進行有趣的聲光效果,按下不同觸碰感測器就會讓手機畫面變色, 除此之外,當您點擊手機畫面時,機器人也會發出音效與您同樂。有接觸過App Inventor 的師長朋友們,歡迎從App Inventor 中文學習網下載原始碼回去加入更多有趣的功能。
觸碰感測器
樂高NXT 套件中的觸碰感測器前端有一個橘色按鍵,可藉此偵測是否撞到物體或被壓下。由於內部構造是一個開關(switch),所以只能判斷前端是否被壓下而無程度上的區別。對應的資料型別是布林(boolean)。在App Inventor 中, 我們使用NxtTouchSensor 元件的IsPressed 指令(圖1)來偵測觸碰感測器是否被壓下,如果被壓下則為true ,反之為false。
開始玩機器人
今天的機器人有點不一樣,不需要馬達,請拿出三個觸碰感測器分別接在NXT 主機的輸入端1 到3 ,組裝好如圖2(註1)。請確認NXT 主機的藍牙是啟動的,接著將NXT 主機與Android手機進行藍牙配對(註2),完成之後就可以把機器人放到一邊了。啟動藍牙之後您可以從NXT 主機的螢幕左上角看到藍牙的符號。
接下來依序介紹程式的各個功能:
STEP1 登入畫面:首次進入程式的畫面如圖3a , 只有「連線」按鈕可以按,其它所有按鈕都無法操作。點選「連線」按鈕後進入藍牙裝置清單(圖3b),請找到剛剛配對完成的NXT 主機名稱(本範例為abc),點選之後就會由Android裝置對NXT 主機發起藍牙連線。順利連線成功的話,就可看到淺灰色的鼓面,且「連線」按鈕變成不可按的狀態,只有「斷線」按鈕可以按(圖3c)。
STEP2 程式初始化:在點選連線清單之前(ListPicker Connect 的BeforePicking 事件),需先將清單內容指定為Android 裝置上的藍牙配對清單(圖4a)。點選之後則先測試連線是否成功,成功則將「斷線」按鈕設為不可點選、「斷線」按鈕設為可點選並顯示Canvas 畫布元件(圖4b)。
STEP3 使用副程式管理觸碰感測器狀態:我們宣告了三個變數t1、t2 與t3 來儲存三個觸碰感測器的狀態(圖5a)。接著宣告一個名為checkTouch 的副程式來管理這三個變數,只要某個觸碰感測器被壓下,就會將對應的變數改為1 ,反之則為0 ,最後回傳這三個變數的加總值(圖5b),我們就是根據這個加總值來改變Canvas 畫布元件的背景顏色。
STEP4 改變Canvas背景顏色:為了讓程式能夠持續監控三個觸碰感測器的狀態, 我們使用了一個Clock 元件,並設定其計時器更新頻率為100 ,代表每0.1 秒偵測一次觸碰感測器狀態。在Clock.Timer 事件中, 藉由呼叫checkTouch 副程式並根據它的回傳值(0、1、2、3) 將Canvas 背景顏色改為淺灰色、綠色。這裡回傳的數值代表被按下的觸碰感測器數目, 也就是說當您壓下1 號與3 號觸碰感測器時,這時與您壓下2 號與3 號以及1 號與2 號的意義是相同的,都會使手機畫面變為青綠色( 圖6 中的Cyan)。同時我們也會把目前偵測到被壓下的觸碰感測器個數顯示在手機畫面上。
STEP5 點擊畫面播放讓機器人播放不同音效:當我們點擊Canvas 元件時, 會根據點擊位置讓機器人發出四種音效。Canvas 元件長寬各為320 像素, 所以我們取中點(160,160) 將畫面分成四等分( 圖7a), 點擊左上、右上、左下與右下時,會讓樂高NXT 機器人發出La、Sol、Mi 與Do 四種音效(圖7b、圖7c), 每次播放長度為0.3秒,這是藉由NxtDirectCommand 的PlayTone 指令所達成的。
STEP6 斷線:按下「斷線」按鈕之後,會中止藍牙連線(BluetoothClient.Disconnect指令),並使畫面上的各個元件恢復到程式一開始時的狀態(圖8)。
操作
實際執行的時候,請先確認NXT 已經開機且藍牙也啟動了。接著在您的Android 裝置上點選畫面中的「連線」按鈕,會進到藍牙清單畫面,點選您所要的NXT 主機名稱並連線成功後,就能按下觸碰感測器來控制手機畫面顏色,或者點擊手機畫面來控制機器人發出不同的音效(圖9a ∼ 9c)。
歡迎大家由此連結或掃描以下的QRCode 來下載本程式:
本程式已上架Google play,請到Google Play 搜尋「CAVE 教育團隊」就找得到我們的樂高機器人系列app 了。請在App Inventor 中文教學網上直接下載本範例的App Inventor 原始檔與apk 安裝檔。
註1: 想學如何開發App Inventor 程式嗎? 請到App Inventor 中文學習網(http://www.appinventor.tw)與我們一同學習。
註2: 將Android 手機設定為可安裝非Google Play 下載的程式以及讓手機與樂高NXT 主機連線等說明請參考:http://www.appinventor.tw/setup。
註3: 與NXT 連線後如果出現[Error 402] 之錯誤訊息請不必理會,程式依然能正確執行。
文章原文刊載於《ROBOCON》國際中文版2014/1月號