使用RobotC通过蓝牙从NXT向PC发送消息

时间:2014-06-03 14:51:33

标签: c bluetooth nxt

我试图从NXT发送消息,用RobotC编程到PC上的Qt应用程序。

从手机发送字符串数据时,PC-Side运行良好。

在NXT上,我首先试图使用sendMessage()函数。这是有效的,但它只能发送整数,并且它增加了一种在PC端复杂解码的头。我可以使用调试器看到这些东西。

然后我尝试了nxtWriteRawBluetooth()函数,它允许在没有标题的情况下发送数据。但是Official documentation并不是很清楚,这个例子看起来很偏僻。我搜索了网络,但没有找到任何有用的资源。 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并不能解决问题
  • 手动设置邮件长度并不帮助
  • 将消息长度减少到一个字节不起作用

我也尝试了cCmdMessageWriteToBluetooth()功能,但没有成功。

欢迎任何建议=)谢谢

其他信息:我在Windows 8上使用RobotC 4.9

0 个答案:

没有答案