0

我对 Arduino 很陌生,所以这可能是一些我不知道的非常简单的 C/C++ 问题

我正在研究一个 RGB LED Cube,它是根据 GreatScott 的视频制作的。它工作正常。我决定通过添加蓝牙来改进可以用它完成的事情。我正在使用来自 DSD 技术的 HM-11。

我可以毫无问题地通过蓝牙将命令从手机写入 arduino,并使用它来交换模式。

我面临的问题是当我尝试通过蓝牙回写手机时。我正在通过蓝牙发回帮助文本,以便连接到它并发送帮助的任何人都可以找到支持的命令列表。使用 SoftwareSerial,我有以下(问题区域的片段):

if(strcmp(command,"help")==0){


    Serial.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"
                  "                         specified colour           \n"
                  "                         64 colours long. Faster    \n"
                  "                         than 64 pt calls           \n"));


    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"
                  "                         specified colour           \n"
                  "                         64 colours long. Faster    \n"
                  "                         than 64 pt calls           \n"));
  }

当它运行时,串口接收:

============== RGBCube 蓝牙帮助 =============== 命令:
mode:# 选择在
帮助中操作的模式 拉起帮助屏幕(this)模式仅限 4:
reset 将立方体重置为黑色
pt:x,y,z=r,g,b 将 (x,y,z) 处的 LED 设置为 rgb set:r,g,b;r,g,b... 设置整个立方体到
指定的颜色
64 色长。
比 64 点呼叫更快

但我的手机最多接收:

============== RGBCube 蓝牙帮助 =============== 命令:
mode:# 选择在
帮助中操作的模式 拉起帮助屏幕(this)模式仅限 4:
reset 将立方体重置为黑色
pt:x,y,z=r,g,b 将 (x,y,z) 处的 LED 设置为 rgb set:r,g,b;r,g,b... 设置整个立方体到

如您所见,这是被截断的。我尝试了很多事情,包括将字符串推入 progmem,将其分割成更小的字符串,用于循环的 Char 数组,强制将其保存在闪存中等。将其切割成更小的字符串是可行的,但我真的不想那样做,因为我要添加的下一件事是从手机到 arduino 的类似长度写入。

有时也会出现更少的字符,但这是平均值和最大值,这让我觉得有某种形式的限制,但它不是 2 的倍数(我最后数了一下大约 80ish)

任何帮助将不胜感激。

4

1 回答 1

0

看起来您可以在被截断之前发送大约 252 个字节。该数字似乎是 BLE 数据包中的最大数据大小。

关于最大数据大小有一些讨论:Bluetooth LE 的最大数据包长度?

BLE“长读”和“日志写”功能包括偏移量以及请求中的句柄,以便可以通过多个请求/响应对在连续块中读取/写入特征值。我不知道 Arduino 库和 HM-11 硬件是否支持该功能。

于 2021-08-29T07:09:27.957 回答