我试图从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);
}
我探索了一些可能性:
我也尝试了cCmdMessageWriteToBluetooth()
功能,但没有成功。
欢迎任何建议=)谢谢
其他信息:我在Windows 8上使用RobotC 4.9