2015年6月24日 星期三

EV3 的 IR Sensor 及 Beacon(Remote Control) 應用

EV3 的主程式架構已經寫好了 , 在這個主程式中會包含幾個大功能 , 目前已經完成兩個 : 1. 手動戰鬥模式 . 2. 表演模式 . 另外還想要寫一個自動模式 , 現在還在構思當中 .

手動戰鬥模式 - 用遙控器控制 EV3 前進 , 後退 , 左轉 , 右轉 及 發射子彈 .

表演模式 - 讓 EV3 唱那首會跳針的 "小蘋果" , 本來已經設計出讓 EV3 可以邊唱 "小蘋果" 邊 "跳舞" (做動作) 的程式 , 因為不小心把 "跳舞" 程式刪了 , 就不想再寫了 , 因為 EV3 的喇叭音量本來就不大 , 而且 EV3 做動作時的聲音還蠻吵得 , 重點是 EV3 根本就不適合跳舞 !

我的 EV3 主程式如下 :



程式執行後先進入 [Flow Control] 的 [Wait] block , 設定是 [Infrared Sensor] -> [Change] -> [Remote] , 也就是一定要按遙控器 (Remote Control/Beacon) 上的任何一個按鍵程式才會繼續 , 否則就一直等待 .

當按下遙控器 (Remote Control/Beacon) 上的任何一個按鍵後 , 會接著執行 [My Blocks] 中的 [Say_Hello] block , 這是我自己寫的一個 Block , 也可以先錄好一段問候語 , 然後利用工具轉成 mp3 或 wav 檔 , 再透過 EV3 程式編輯器的 [Sound Editor] 轉存成 rsf 聲音檔 , 最後用 [Action] 中的 [Sound] block 來播放 .

接下來程式會進入一個 [Flow Control] 的 [Loop] block 中 , 注意 : [Loop] 的編號不要跟其他的 [Loop] 編號一樣 (我這邊是用 99) , 如果 [Loop] 的編號都一樣 , 當你用 [Flow Control] 的 [Loop Interrupt] 要結束某一個 [Loop] block 時 , 會把其他還沒要結束的 [Loop] 也一併結束掉 . 所有的大功能都會在這個 [Loop] 中重複 , 直到你不想玩了才結束整個程式 . 

再來用一個 [Flow Control] 的 [Switch] block 來作主功能的選擇 , [Switch] block 的設定是 [Infrared Sensor] -> [Measure] -> [Remote] , 如果遙控器都沒被按下 , 則甚麼事都不做 (空迴圈)(預設條件) , 按下遙控器的第 1 個按鍵會進入 [手動戰鬥模式] , 按下第 2 個按鍵會進入 [表演模式] .

進入 [手動戰鬥模式] 後會執行我自己寫的 [My Blocks] 中的 [Man_Mode] block .

進入 [表演模式] 則會執行 [My Blocks] 中的 [Little_Apple] block , 這也是我自己寫的 block 可以參考 : [讓 EV3 唱 "小蘋果"] .

如果按下遙控器的大按鍵 [9] 則會符合 [Flow Control] 中 [Loop ] block 的結束條件 , 結束整個程式 . 設定是 [Infrared Sensor] -> [Compare] -> [Remote] , ID = [9] .

[手動戰鬥模式] 的程式如下 :

進入 [手動戰鬥模式] 後先用 [Flow Control] 中的 [Wait] block 來等待使用者按下/放掉 (碰撞) [Touch Sesnor] , 設定是 [Touch Sensor] -> [Compare] -> [State] , [State] 是 [2] (Bumped)  .

接下來進入 [Flow Control] 的 [Loop] block , 注意 : [Loop] 的編號是 [01] , 不可以跟主程式的 [Loop] 編號一樣 , 否則一執行 [Loop Interrupt] 就會結束所有迴圈 (Loop) ,接下來是 [Flow Control] 的 [Switch] block , [Switch] block 的設定 [Infrared Sensor] -> [Measure] -> [Remote] , 按下遙控器 (Remote Control/Beacon) 的第 1 鍵是 [前進] , 第 3 鍵是 [後退] , 第 2 鍵是 [左轉] , 第 4 鍵是 [右轉] , 大按鍵是 [發射子彈] , 都沒按則是跑空迴圈 (預設條件) .

最後如果按下/放掉 (碰撞) [Touch Sesnor] 就會符合 [Flow Control] 中 [Loop ] block 的結束條件 , 結束 [Man_Mode] 程式 . 設定是 [Touch Sensor] -> [Compare] -> [State] , [State] 是 [2] (Bumped) .

沒有留言:

張貼留言