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 を使用しています