[C++] NXT++ Library

撰文:謝宗翰老師

之前曾跟各位介紹過給 NXT 使用的 C++ LibraryNXT++ 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++ 設計一個簡單的測試程式,下禮拜再跟各位分享。

 

7 thoughts on “[C++] NXT++ Library

  1. 西瓜 says:

    你好,我想請問一下,利用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;
    }

  2. 西瓜 says:

    請問配對好的意思是,因為我的NXT已經跟電腦配對好了,可是還沒有連接,這樣應該是正確的吧,如圖: http://imgur.com/IYJz0re
    [版主回覆07/30/2013 10:25:52]這樣沒錯 請問你程式在跑時找不到裝置有甚麼錯誤訊息嗎?

  3. 西瓜 says:

    我回應在上面了,可以請你幫我看看那個範例code的問題嗎?
    [版主回覆07/31/2013 22:55:43]哈囉:如果你完全照那個 code 的話,if(NXT::Open(&comm)) 是要接著傳輸線才行喔! 你可以先試試看接傳輸線找不找得到。要用藍牙的話,要改成 if(NXT::OpenBT(&comm)) 要多加一個 BT 。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *