为什么代码3次后发送数据成功?

Why does the code send data successful after 3 times?

我正在与 pic 微控制器建立蓝牙连接。我使用 HC-06 作为蓝牙模块。我确信图片编码正确,因为当我使用预制应用程序时它可以 100% 工作。但是当我尝试使用我自己制作的应用程序时,它只能在 3 次后运行。让我更好地解释一下。

我制作的应用程序非常简单,只是一个带有点击事件的按钮,点击按钮时应该将数据作为字符串发送到写入函数,写入函数应该将数据发送到图片。

但实际情况是它每 3 次才有效。所以当我按下按钮 3 次时它确实起作用了。我不确定是什么问题以及为什么它如此具体 3 次。

private void writeData(string data)
{
        try
        {
            outStream = btSocket.OutputStream;
        }
        catch (System.Exception e)
        {
            System.Diagnostics.Debug.WriteLine("Fout bij het verzenden " + e.Message);
        }

        string message = data;

        byte[] msgBuffer = Encoding.ASCII.GetBytes(message);

        try
        {
            outStream.Write(msgBuffer, 0, msgBuffer.Length);
        }
        catch (System.Exception e)
        {
            System.Diagnostics.Debug.WriteLine("Fout bij het verzenden " + e.Message);
        }
}

这是向pic单片机写入数据的函数。

ServiceLocator.bluetoothService.WriteData("D2O[=11=]");

这是我发送给pic MCU的数据。在 ServiceLocator 和 bluetoothService 中没有什么特别的,它们就在这里,所以我可以从 main 调用 write。

我测试了[]字节中的数据类型:

 System.Diagnostics.Debug.WriteLine(message)

这与通过点击事件发送的数据完全相同。

一个可能的解决方案是:

       try
        {
            outStream.Write(msgBuffer, 0, msgBuffer.Length);
            outStream.Write(msgBuffer, 0, msgBuffer.Length);
            outStream.Write(msgBuffer, 0, msgBuffer.Length);
        }

但这发送了 3 次该项目,我认为这不是解决问题的合适方法。

我找到了答案。

我所做的是将一个模块连接到我的 PC,这样我就可以从 phone 读取外发消息。当我知道我的 phone 发送了什么时,我下载了一个串行终端应用程序并做了同样的事情,所以我可以看到应用程序发送了什么。

我发现应用程序的消息还发送 \r\n(马车 return 和馈线)。所以我也在我的 ASCII 编码中实现了它并且它按预期工作。

这就是我所做的更改:

byte[] msgBuffer = Encoding.ASCII.GetBytes(message + "\r\n");

谢谢你的帮助