c - 字符串是发送此数据的最有效方式吗?

标签 c bluetooth arduino serial-port

我正在使用 Arduino 发送超过 3 个旋转轴和 3 个按钮状态。目前我正在将其格式化为如下字符串:

“#235#12#32$TlR”

前 3 个数字是旋转,t、l、r 是按钮,其中大写字母告诉我按钮是否被按下。

我正在使用以下方式将数据写入 com 端口:

Serial.println

使用我的电缆一切都很好,但是当我切换到蓝牙(我连接了一个模块)时,旋转有很大的延迟。

该字符串是否太大,无法通过蓝牙以每秒 30 次的速率发送?有没有办法将我的数据格式化为较小的包?

非常感谢!

最佳答案

二进制肯定会更小 - 假设每个轴都适合一个字节,按钮适合一个 8 位位字段,您可以将 14 字节 bpackage 缩小为 3 或可能 4 字节(也许添加某种帧)。这显然会将使用的带宽减少至少 3 倍(但是会使您的程序复杂化。如果所有内容都适合字节,那么您至少不会遇到平台字节顺序问题)

通过蓝牙,在接近理想的条件下,您可以期望约 80kbit/s 的带宽。 - 20 * 30 字节/秒应该很容易实现,即使您坚持使用现有的 ASCII 协议(protocol)。

关于c - 字符串是发送此数据的最有效方式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35987928/

相关文章:

java - 用 Java 控制 Arduino

c - 访问结构体内部的结构体指针数组

c - 如何使用 settimeofday(2)?

c++ - 这个例子可以用指针而不是全局变量来完成吗?

sockets - 蓝牙:如何使用Bluez创建套接字以连接到具有特定UUID的服务?

c++ - 如何为 Arduino 代码声明 C++ 函数?

c - execv* 并写入标准输入

windows - 蓝牙低功耗 API Windows 8

java - 如何获取蓝牙配对设备的设备名称?

c - 如何设置LED从一开始就关闭(Arduino)