我有一个 Arduino mega 通过蓝牙(bluesmirf gold 设备)与我编写的 C# 应用程序通信。Arduino 不断发送 32 个字符的串行信号,第一个始终是“S”,最后一个是“E”。使用 putty,我可以确认 99% 的时间都正确发送了这个信号。
现在我想用我的 C# 应用程序读取这个信号,我正在使用以下代码:
public string receiveCommandHC()
{
string messageHC = "";
if (serialHC.IsOpen)
{
while (serialHC.ReadChar() != 'S')
{
}
messageHC = serialHC.ReadTo("E");
serialHC.DiscardInBuffer();
}
return messageHC;
}
serialHC 属于串行类。
有时这工作得很好,但有时我遇到问题,我不知道为什么它有时会起作用,但其他时候却不行。
我似乎遇到的问题是,有时我从 arduino 读取的数据中会出现相当大的滞后。我注意到这一点是因为我正在发送按钮状态,并且它们仅在我实际按下或释放 Arduino 上的按钮后几秒钟发生变化。我使用了蓝牙设备的标准波特率,即 115200,并且想知道将其更改为更低的速率是否会产生更好的结果?如果有什么优势呢?我不需要高通信速率,即使每秒更新状态 4-5 次对于我的应用程序也是可以接受的。
延迟是否可能来自我的代码?我认为它可能来自等待传入“S”的while循环,但我不明白为什么它应该挂在那里,因为总是有新信号以高速率进入。
我使用 DiscardInBuffer() 因为我不关心过时的数据,只想跳过它。更重要的是,我正在阅读最新数据并根据这些新数据采取行动。
感谢您的帮助!
最好的祝福,
本德
更新:
刚刚在调试时发现了更多信息。问题似乎只出现:
- 通过蓝牙连接时(通过 USB 电缆绝对没有延迟)
- 当从 PC 建立第二个蓝牙连接到另一个设备时(不同的 COM 端口和不同的波特率)
有没有人有在 PC 上使用同一个蓝牙加密狗运行两个不同设备的经验?我可以设法连接到这两个没有问题,但仍然有前面提到的滞后问题。
谢谢你的帮助