为什么代码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");
谢谢你的帮助
我正在与 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");
谢谢你的帮助