撰文:謝宗翰老師
之前曾跟各位介紹過給 NXT 使用的 C++ Library:NXT++ Library 以及 C++ Communication Library,當時對 NXT++ 有所批評,然而在經過多次實作過後,筆者認為事實上兩者都還算好用(雖然兩者好像都很久沒更新了),對於需求不高的使用者,已經非常足夠。這兩個 Library 都需透過傳輸線或藍牙進行控制,因此主要仍以電腦為控制核心,NXT 當做電腦的延伸,與 LabVIEW 的 Direct Mode 相同。看到這裡,很多人或許會問:這麼不方便,為什麼還要用它?
答案很簡單,要用什麼樣的程式語言,端看您的需求。C++目前仍是程式語言的大宗,在開發與應用上具有無限的潛力,就像是使用 LabVIEW 的 Direct Mode,在 Direct Mode 下,NXT 是電腦的延伸,我們可以讓電腦進行各式各樣的運算,再藉由 NXT 來致動,同樣的道理,使用 C++,我們可以設計視窗程式介面、使用機器視覺函式庫(OpenCV),甚至結合其他硬體(許多硬體都會提供 C++ 的開發工具,即 SDK),讓 NXT 從單一的機器人變為一套更強大的系統。
目前筆者已嘗試使用過 Visual C++ 配合 NXT++ 以及 C++ Communication Library 撰寫過一些程式,事實上在兩者的網站上對於 Visual Studio 的使用環境皆有非常詳細的解說,各位不妨參考看看。另外筆者目前正在使用 Qt 結合 NXT++ 設計一個簡單的測試程式,下禮拜再跟各位分享。
你好,我想請問一下,利用NXT++,要怎麼利用bluetooth跟樂高做連接,因為我用別人寫好的程式可以連結,但是用NXT++的EXAMPLE卻不行,請問是少了利用藍芽連線的那行嗎?
下面是code
————————————————————-
#include "nxtpp_07\include\NXT++.h"
#pragma comment (lib, "nxtpp_07/lib/fantom.lib" )
#include
using namespace std;
int main()
{
printf( "Searching for NXT devices… (please wait) \n\n" );
Comm::NXTComm comm;
cout << "NXT++ test project" << endl;
while(1)
{
if(NXT::OpenBT(&comm))
{
printf("true\n");
break;
}
//else
//printf("%s\n",NXT::Open(&comm));
}
if(NXT::OpenBT(&comm)) //initialize the NXT and continue if it succeds
{
NXT::Sensor::SetTouch(&comm, IN_1); //tell the NXT that the touch sensor is in port 1
while(1) //main loop
{
if(NXT::Sensor::GetValue(&comm, IN_1) == true) //if the touch sensor is pressed down…
NXT::Motor::SetForward(&comm, OUT_A, 50); //turn the motor in port 1 on 50% power
else
NXT::Motor::Stop(&comm, OUT_A, false); //if the touch sensor is not pressed down turn the motor off
}
}
return 0;
}
我在連線前已經配對好了,可是程式跑的時候還是找不到裝置ㄟ
我的作法是:
1.先跟NXT配對成功。(還沒連接)
2.利用NXT++的範例code跑,這份: https://github.com/cmwslw/nxt-plus-plus/blob/master/examples/nxtpp_07_demo.txt
3.然後發現他沒有抓到NXT。
[版主回覆07/24/2013 18:57:43]哈囉:
在執行程式前,NXT 要先跟電腦配對好喔!
請問配對好的意思是,因為我的NXT已經跟電腦配對好了,可是還沒有連接,這樣應該是正確的吧,如圖: http://imgur.com/IYJz0re
[版主回覆07/30/2013 10:25:52]這樣沒錯 請問你程式在跑時找不到裝置有甚麼錯誤訊息嗎?
我是利用NXT++的範例code, https://github.com/cmwslw/nxt-plus-plus/blob/master/examples/vs90_projects/NXT%2B%2B%20test/NXT%2B%2B%20test/NXT%2B%2B%20test.cpp ,但他不會進去 if 判斷裡面,是因為沒有偵測到裝置嗎?
我回應在上面了,可以請你幫我看看那個範例code的問題嗎?
[版主回覆07/31/2013 22:55:43]哈囉:如果你完全照那個 code 的話,if(NXT::Open(&comm)) 是要接著傳輸線才行喔! 你可以先試試看接傳輸線找不找得到。要用藍牙的話,要改成 if(NXT::OpenBT(&comm)) 要多加一個 BT 。
你好,我已經修改成if(NXT::OpenBT(&comm)) 了,可是他還是沒有跑進if 裡面,執行的圖長這樣:
http://imgur.com/YItxfQr