2

RobotC でプログラムされた NXT から PC 上の Qt アプリケーションにメッセージを送信しようとしています。

電話から文字列データを送信する場合、PC 側はうまく機能します。

NXTで、まずはsendMessage()機能を使ってみました。これは機能しますが、整数しか送信できず、PC 側でのデコードを複雑にする一種のヘッダーが追加されます。デバッガーを使用してこのようなものを見ることができました。

nxtWriteRawBluetooth()次に、ヘッダーなしでデータを送信できる機能を試しました。しかし、公式ドキュメントはあまり明確ではなく、例はトピックから外れているように見えます。ウェブをグーグル検索しましたが、役立つリソースが見つかりませんでした。RobotC の例も役に立ちませんでした。

NXT の RobotC コードは次のとおりです。問題なくコンパイルおよび実行されます。(しかし、期待通りに動作しません)

////////////////////////////////////////////////////
//                Bluetooth Functions             //
////////////////////////////////////////////////////

// Sets the Blootooth mode to "raw"
void btToRaw()
{
    setBluetoothRawDataMode();
    while (!bBTRawMode){
        wait1Msec(1);
    }
    nxtScrollText("Nxt in Raw Mode");
}

// Waits until a connection is set
void waitForConnection()
{
    while(nBTCurrentStreamIndex < 0){
        wait1Msec(100);
    }
    nxtScrollText("Connecte");
    wait1Msec(1000);
}

// Sends a message over BT using the raw method
int sendToBt(ubyte* sourse, int len)
{
    wait1Msec(100);
    nxtWriteRawBluetooth(nBTCurrentStreamIndex , sourse, len);
    wait1Msec(100);
    return 1;
}

////////////////////////////////////////////////////
//                     Main Task                  //
////////////////////////////////////////////////////

task main()
{

    waitForConnection(); // should already be OK at that time
    btToRaw(); // Sets mode to raw

    ubyte Bytes[1]; // Byte array to send (example lenth)
    Bytes[0] = 'A'; // Content to send (example content)

    // The goal is to send an array with multiple bytes but I simplified to identify the bug

    nxtScrollText("Send a message");
    TFileIOResult Result = nxtWriteRawBluetooth(nBTCurrentStreamIndex , Bytes, 1); // Sends the message

    // Verify result
    switch (Result)
    {
    case ioRsltSuccess:
        nxtScrollText("Send OK");
        break;

    case ioRsltCommPending:
        nxtScrollText("Send Pending..");
        break;
    case ioRsltCommChannelBad:
    default:
        nxtScrollText("Send Bad"); // And it's what I get on the screen =(
        break;
    }
    wait1Msec(1000);
}

私はいくつかの可能性を探りました:

  • ストリーム インデックスを 1、2、または 3 に手動で設定しても問題は解決しません
  • メッセージの長さを手動で設定しても役に立たない
  • メッセージの長さを 1 バイトに減らしても効果がない

私もその機能を試しましたcCmdMessageWriteToBluetooth()が、成功しませんでした。

どんなアドバイスも大歓迎です =) ありがとう

追加情報: Windows 8 で RobotC 4.9 を使用しています

4

0 に答える 0