Transcript Jimmy

leJOS NXJ
Closedoor training
講師:Jimmy Chen
講師自介
• 國立成功大學機械所碩士
• 訊連科技軟體工程師
• 台大電機所羅仁權教授研究助理
• CAVE教師團隊講師
CAVE 小小原始人 科學創意工坊
Creativity
Virtue
Adventure
Enjoy
今日課程目標
認識leJOS
JAVA環境介紹
認識感測器
實作體驗
為何要學leJOS NXJ
•
•
•
•
•
•
•
可跨平台
簡單
物件導向
安全
穩定
多執行序
支援多種檔案操作
安裝與設定
1. 安裝NXT 驅動程式
2. 安裝JDK (Java Development Kit)
3. 安裝leJOS NXJ
4. 電腦環境設定
5. 安裝NXJ 韌體
注意
Java 有為64 位元Windows 提供「
Windows x64」版本,但經筆者測試後發現
64 位元版本可能會導致leJOS 找不到NXT
驅動程式,因此建議仍然使用32 位元版本
即可。
若您必須使用64 位元版本,可以參閱
附錄B-5:Windows 64 位元相容性解決方
案。
安裝NXJ 韌體
• leJOS使用的韌體和NXT 原廠
韌體不同,在開始編寫程式之
前,需要先更新leJOS韌體。
• 將您的NXT 開機並用USB線
材與電腦連接,進入命令提示
字元後打nxjflashg,左邊的視
窗就會跳出,再點選Start
Program即可開始更新韌體。
安裝NXJ 韌體
安裝NXJ 韌體
• 更新韌體會刪除所有NXT 裡的檔案:
選「是」清除所有檔案
選「否」不清除檔案
安裝NXJ 韌體
• 安裝完成後,會詢問是否重新安裝NXT 韌
體,若沒有發生問題按「否」。
NXT開機
• 韌體安裝完成後獲釋開機時會出現 圖示及
「LEJOS」字樣,並會發出「Do、So、
Me」聲音。
• 若開機不成功,可能是電力不足或是韌體
安裝失敗。
NXT主選單畫面
MYNXT
BT
• 主選單上方的「MYNXT
>Run Default
」表示NXT的名稱。
Files
• 「BT」表示已開啟藍芽通 Bluetooth
Sound
訊,若顯示反白的「BT」 System
Version
表示藍芽通訊關閉。
選項
功能
Run Default
執行使用者預設程式
Files
檢視檔案
Bluetooth
藍芽設定
Sound
聲音設定
System
系統設定
Version
顯示韌體版本
電腦環境設定
• 在「我的電腦」上按右鍵→「內容」→
「進階」→「環境變數」。
• 在「系統變數」中新增變數:
JAVA_HOME
NXJ_HOME
CLASSPATH
JDK 安裝路徑,例如:
"C:\Program Files\Java\jdk1.6.0_18"
leJOS NXJ 的安裝路徑,例如:
"C:\Program Files\leJOS NXJ"
建立CLASSPATH,值設為 "."
電腦環境設定
• 在「系統變數」中修改變數:
Path 在後方加上
"%JAVA_HOME%\bin“和"%NXJ_HOME%\bin“
路徑,兩個路徑中間用分號 ";" 隔開
測試環境設定
• 點選「開始」→「執行」,輸入cmd後進入
命令提示字元。
• 在命令提示字元視窗中依序輸入:
「javac」、「java」、「nxjc」、「nxj」、
「nxjpcc」、「nxjpc」。
• 如果設定正確會出現一些對應這些指令的
內容。
環境設定錯誤
• 若碰到以下途中的情況,請重新檢查所有
的設定是否正確無誤。
建立原始碼
建立原始碼
>>>
開啟檔案
Notepad++
編輯器建議
請不要用排版軟體編輯原始檔,例如
Word或是OpenOffice.org的writer,因為
Java原始碼是「純文字」的檔案,文字本
身不具有格式,排版軟體可能會加入表示
格式的文字影響原始碼內容。
leJOS API
• API為Application Programming Interface的縮寫
,意為「應用程式介面」 。
• 內容包含了程式擁有的變數、方法、類別等解釋
,通常以文件的形式呈現。
• leJOS 的API 文件已安裝在電腦中,位在:
<XP>C:\Documents and Settings\使用者名稱
\leJOSNXJProjects\classes\doc\
<W7>C:\Users\使用者名稱\leJOSNXJProjects\
classes\doc
範例一
• Sample3_1.java。
• 車子前進4秒鐘。
編譯Java 原始檔
• 何謂編譯(Compile):
「編譯」是把「.java」原始碼檔案轉換成「
.class」檔案的動作,其中「.java」檔案是給人
看的,「.class」是給電腦看的。在轉換的過程中
,需要一個「編譯器」,把原始碼翻譯成電腦的
語言。
leJOS的原始碼本身是Java語言,副檔名為
「.java」。經過Java編譯器編譯後,產生副檔名
為「.class」的Java位元組碼(Java bytecode)
檔案,再經過leJOS封裝成「.nxj」檔案,就可以
由NXT執行。
編譯Java 原始檔
編譯Java 原始檔
編譯Java 原始檔
• 進入命令提示字元視窗。
• 用「nxjc 檔案名稱」指令來編譯leJOS 原
始檔。
• 用「nxj 程式名稱」下載程式到NXT。
範例二
• Sample3_2.java。
• 應用兩輪同時正轉、反轉來前進、後退,
或只動其中一輪來轉彎,加上時間的控制
,可以設定動作的時間長度。
變數
• 變數(Variable)是指在程式執行階段中可能
會因為某些狀況改變的數值。
• 隨時可以讀取或更改變數所儲存的值。
• 變數在程式應用上極為廣泛,不論是記錄
資料或是迴圈執行次數都用得到變數。
變數的命名方式
• 可包含英文字母、數字、底線「_」。
• 可以用英文字母或底線「_」作為開頭,但
不可是數字。
• 不能有空格。
• 英文大小寫有分別。
• 不能是Java 的關鍵字或保留字。
Java 的關鍵字及保留字
變數資料型態的宣告
• 使用變數時,為了宣示變數的存在,要對
這個變數進行「宣告」,這樣記憶體就會
分配給它一段記憶體空間。
• 宣告時,變數的型態寫在前面,變數名稱
寫後面,記得最後面要寫分號。
• 在程式上「=」表示「存入」或「指定」,
也就是說程式上的「=」會把右方的值儲存
到左方的變數。
• 請注意設定變數值時不能超過它所容許的
範圍,否則會造成溢位錯誤。
Java 變數型別
範例三
• Sample4_1.java
• 在程式中使用變數可以使更改數值時更方
便。
• 要修改車子前進與後退的時間時只要更改
代表時間的變數值就好,不用逐行修改每
一個的參數。
字串與字元
• 我們可以將一段文字宣告為字串(String)
或將一個字母宣告為字元(char)。
• 字串和字元的宣告和指定的方式都和之前
的資料型態相同。
• 字串和字元不同的地方在於字串可以儲存
一段文字,字元只能儲存一個文字符號。
• 字串要用雙引號包起來,字元則是用單引
號。
感應器
• leJOS 的感應器類別是包含在lejos.nxt 類別
之下,因此不必額外載入其他套件。
• 使用感應器時必須使用對應的類別來建立感
應器物件後才能正確使用。
• 用SensorPort.S1 來表示觸碰感應器接在
NXT 輸入端1。
感應器類別 sensor = new 感應器類別(輸入端);
TouchSensor touch = new TouchSensor(SensorPort.S1);
觸碰感應器
• 觸碰感應器使用TouchSensor 類別建立感
應器物件,並需指定感應器的輸入端。
TouchSensor touch = new TouchSensor(SensorPort.S1);
• TouchSensor 類別下的方法只isPressed()
來取得按鈕狀態並回傳一個布林值來代表
是否被壓下。
• True 為壓下,反之為false。
boolean bump = touch.isPressed();
碰碰車
• Sample5_1.java。
• 請在範例機器人裝上一個觸碰感應器,觸
碰感應器要朝向前方。
• 執行時機器人會向前走,一旦撞到障礙物
就會後退並轉彎來躲避障礙物。
聲音感應器
• 聲音感應器使用SoundSensor 建立感應器物件,並需指
定感應器的輸入端。
SoundSensor sound = new SoundSensor(SensorPort.Sl);
• 用readValue()方法取得音量,回傳一個介於0~100 之間
的整數值。
int n = sound.readValue();
• 另外可以加上一個布林參數來設定聲音的模式為dB 或
dBA。
SoundSensor sound = new SoundSensor(SensorPort.S1, true);
//使用dBA模式
SoundSensor sound = new SoundSensor(SensorPort.S1, false);
//使用dB模式
聲控車
• Sample5_2.java。
• 在範例機器人裝上一個聲音感應器,聲音
感應器建議朝上且離馬達遠一點會有比較
良好的偵測效果。
• 執行時只要對感應器喊一聲,車子就會前
進,再喊一聲,便停止並結束程式。
光感應器
• 光感應器用LightSensor 建立感應器物件。
LightSensor light = new LightSensor(SensorPort.S1);
• 另外可以加上一個布林參數來改變模式。
LightSensor light = new LightSensor(SensorPort.S1, true);
//反射光模式
LightSensor light = new LightSensor(SensorPort.S1, false);
//環境光模式
LightSensor類別
• readValue()- 讀取亮度值,讀取的亮度值為
0~100 的百分比值,以int 型態回傳。
LightSensor light = new LightSensor(SensorPort.S1);
• setFloodlight() - 切換反射光、環境光模式
。
light.setFloodlight(true); //反射光模式
light.setFloodlight(false); //環境光模式
遇到黑線停止
• Sample5_3.java。
• 在附錄B 的範例機器人前方裝上一個光感應
器,光感應器朝下。
• 機器人會朝黑線移動,機器人一旦偵測到
黑線就會停下來。
超音波感應器
• 超音波感應器使用UltrasonicSensor 類別建
立感應器物件,需指定感應器的輸入端。
UltrasonicSensor ultrasound = new UltrasonicSensor(SensorPort.S1);
• getDistance() - 取得距離
以公分為單位,以int 型態回傳,可測最遠
距離大約170 公分,若沒有偵測到物件則回
傳255。
int n = ultrasound.getDistance();
保持距離
• Sample5_4.java。
• 機器人會試著和前方的物體保持固定的距
離。
• 將手放到超音波感應器前面,並將手前後
緩緩移動,機器人會前進或後退來調整距
離。
Q&A