有許多學校運用NXT進行JAVA程式教學,或是機器人課程以JAVA進行控制。
參考何老師的書籍,裡面的範例程式應該是使用iCommand 0.5
目前iCommand 0.7的程式庫已經有一些修改。
從JAVA討論區得知這個問題,原始程式碼如下:
import icommand.nxtcomm.*;
public class GetDeviceInfo {
public static void main(String[] args) {
NXTCommand.setVerify(true);
DeviceInfo nxt = NXTCommand.getDeviceInfo();
FirmwareInfo firmware = NXTCommand.getFirmwareVersion();
System.out.println("==============================");
System.out.println("NXT name: "+ nxt.NXTname.trim());
System.out.println("藍芽裝置位址: "+ nxt.bluetoothAddress);
System.out.println("剩餘記憶體: "+ nxt.freeFlash);
System.out.println("NXT 韌體版本: "+ firmware.firmwareVersion);
NXTCommand.close();
}
}
=======================================
一開始我從一些範例程式學習,
只知道import icommand.nxtcomm.*;
需要改為import icommand.nxt.comm.*;
接下來卻遇到這樣的錯誤訊息:
Cannot make a static reference to the non-static method getDeviceInfo() from the type NXTCommand
Cannot make a static reference to the non-static method getFirmwareVersion() from the type NXTCommand
由於我不瞭解JAVA,當場傻眼,做了許多嘗試還是無法解決問題,最後只好向LeJOS論壇求援。
還好馬上獲得善心人士ChrisB01的解答(請點擊連結觀看論壇文章),
終於知道如何更正程式,最後的程式碼如下:
import icommand.nxt.comm.*;
public class GetDeviceInfo {
static NXTCommand command = NXTCommand.getSingleton(); // Create own pointer here
public static void main(String[] args) {
NXTCommand.open(); //You might also need this static method to open the connection
NXTCommand.setVerify(true); // This IS a static method so you CAN use the class name
DeviceInfo Devinfo = command.getDeviceInfo(); // NOTICE command NOT NXTCommand
FirmwareInfo firmware = command.getFirmwareVersion(); // NOTICE command NOT NXTCommand
System.out.println("===============================");
System.out.println("NXT Name: " + Devinfo.NXTname.trim());
System.out.println("藍牙裝置位置: " + Devinfo.bluetoothAddress);
System.out.println("剩餘記憶體: " + Devinfo.freeFlash);
System.out.println("NXT韌體版本: " + firmware.firmwareVersion);
NXTCommand.close(); // This IS a static method so you CAN use the class name
}
}
不過執行結果還是有一點小問題,NXT名稱的前一個字母不見了。
總之經過這一次實驗的心得是:
1. JAVA真難懂。
2. iCommand真難懂,或許還要修正。
3. 善用論壇,總有善心前輩熱心幫忙。
使用iCommand的達人請多多幫忙喔!謝謝!
我問一下喔 您這個程式中的icommand.properity是如何設定的
回覆刪除我發現這部分好像多了很多書裡沒有的東西
這本書中只教了改nxtcomm
其他好像直接跑會有問題
[版主回覆12/18/2008 09:58:28]你好:
我不是很瞭解JAVA,所以我也無法完整回答。
我也沒有何老師的書,但是從範例程式大概可以看出,
可能是icommand版本差異的緣故,部分類別好像變更名稱及用法。
如同我文章所述,這個程式是論壇的好心人回答問題,不是我所解決的,所以有一些寫法我也正在學習。
這部分可能還要請問何老師(我不認識他)或其他JAVA達人
也建議您到LeJOS論壇看看。
祝你成功!