1

私のタイトルが特に正確でない場合は申し訳ありません。

Android Phone からシリアル デバイスにバイト データを転送しようとしています。以下に示すように、送信したいデータは 16 進値のバイト配列です。現在の方法で送信すると、RealTerm のシリアル ポート モニターに、送信した値 (F0 F0 FC F3) とは異なる値が表示されます。

void __fastcall Blue::send(Byte * data, int len)
{
    TBytes DataToSend;
    DataToSend.set_length(1);

    for(int i = 0; i < len; i++)
    {
        DataToSend= ToBytes(data[i]);
        if(!btSocket->Connected)
            btSocket->Connect();
        btSocket->SendData(toSend);
    }
}

int Bluetooth::sendMessage(void *data, unsigned short len)
{
    Byte bff[4] = {'\AA', '\x55', '\xA5', '\x5A'};
    unsigned short crc;

    crc = util->calcCRC((unsigned long)data, len / 2);

    send(bff, 4);
    send((Byte *)data, len);
    return 0;
}

それが接続を取得する方法です

TBluetoothSocket* Bluetooth::getBtSocket()
{
    if(btSocket == NULL)
    {
        TBluetoothDevice * lDevice = fPairedDevices->Items[Form1->ComboBoxPairedDevices->ItemIndex];
        btSocket = lDevice->CreateClientSocket(StringToGUID(ServiceGUI), false);
    }
    return btSocket;
}

そのため、最初に bff を開始シーケンスとして送信し、残りのデータをシリアル通信を使用して送信します。btSocketはただのTBluetoothSocket.

ばかげているように聞こえるかもしれませんが、実際にはボーレートでした。

4

1 に答える 1

0

RealTerm で正しいボーレートを設定してください ;)

于 2018-10-11T12:23:10.463 に答える