Arduino sequential softwareserial.print()覆盖自身



我仍然有从DSD技术的HM-11蓝牙写入手机应用程序的问题(play store上的串行蓝牙终端1.35)。

我的代码目前有一个大字符串切成2,根据我上一篇文章的结果,由于BLE的最大缓冲区约为252字节。我所面临的问题是,目前需要的dealy(450)来防止乱码。

BTSerial.print(F( "============== RGBCube Bluetooth Help ==============n"
"Commands:                                           n"
"  mode:#                 select mode to operate in  n"
"  help                   pull up help screen (this) n"
" Mode 4 only:                                       n"
"  reset                  resets cube to black       n"
"  pt:x,y,z=r,g,b         sets led at (x,y,z) to rgb n"
"  set:r,g,b;r,g,b...     sets entire cube to the    n"
));
delay(450);
BTSerial.print(F( "                         specified colour           n"
"                         64 colours long. Faster    n"
"                         than 64 pt calls           n"
));

延时输出:

============== RGBCube蓝牙帮助 ==============命令:
模式:# select模式操作在
帮助拉起帮助屏幕(这个)
pt:x,y,z=r,g,b设置led at (x,y,z)为rgb设置:r, g, b; r, g, b…将整个立方体设置为
指定的颜色
64色长。
比64pt调用更快

及时:

============== RGBCube蓝牙帮助 ==============命令:
模式:# select模式操作在
帮助拉起帮助屏幕(这个)模式4:
reset复位立方体为黑色
,b;r,g,b…Setspt:x,y,z=r,g,b整个立方体到

我认为这与串行清除的速度有关,但花那么长时间是没有意义的,因为450ms在计算机时间中是荒谬的长,特别是在115200波特的蓝牙

据我所知,这是BLE消息传递系统的一个限制。对于BLE来说,没有串行通信这样的东西,一切都是基于类型分组的。不知何故,我手机上的应用程序能够通信并向它发送长达252字节的数据包,并将其伪装成串行数据包,这样就不会被注意到。过了这么多,BLE就无法发送这么多数据了,缓冲区就乱了。有更多BLE经验的人也许能解释,但这是我的结果。

要补救,请切换到只支持串行的常规蓝牙(HC-05,或HC-06或同等功能,而不是BLE)。由于没有类型化的数据包,所以它可以工作。我只是换出了组件(完全相同的引脚,所以1换1),问题解决了。谢谢上面那些人的建议,但事实证明这就是问题所在。

最新更新