Kai丶0727 2021-06-19 18:24 采纳率: 50%
浏览 72

Arduino蓝牙通讯,手机接收到的信息一直分段收到

我在用Arduino进行蓝牙通讯时,发现了一个问题,通过Arduino端串口发送给手机蓝牙时,手机接收到的信息不完整,比如我发送数字串“12345”,而手机端显示的

我的代码如下:

#include <SoftwareSerial.h>

#define RxD 10
#define TxD 11


SoftwareSerial BTSerial(RxD, TxD);

void setup() {
  // replace BAUDRATE as suggested
  BTSerial.begin(9600);
  Serial.begin(19200);
  BTSerial.print("AT\r\n");
}

void loop() {

 if (BTSerial.available())
    Serial.write(BTSerial.read());

  if (Serial.available())
    BTSerial.write(Serial.read());
    
}

 经过查阅资料,发现Serial.read()一次只能读取一字节,于是我将代码修改如下:

#include <SoftwareSerial.h>

#define RxD 10
#define TxD 11


SoftwareSerial BTSerial(RxD, TxD);

void setup() {
  // replace BAUDRATE as suggested
  BTSerial.begin(9600);
  Serial.begin(9600);
  BTSerial.print("AT\r\n");
}

void loop() {

  if (BTSerial.available())
    Serial.write(BTSerial.read());

  if (Serial.available()) {

    String serialData = Serial.readString();    // 将接收到的信息使用readString()存储于serialData变量
    BTSerial.print("Received Serial Data: ");     // 然后通过串口监视器输出serialData变量内容
    BTSerial.println(serialData);

  }
}

输出还是不正确

 还有段代码如下:

#include <SoftwareSerial.h>

#define RxD 10
#define TxD 11

const int bufferLength = 10;    // 定义缓存大小为10个字节
char serialBuffer[bufferLength];// 建立字符数组用于缓存

SoftwareSerial BTSerial(RxD, TxD);

void setup() {
  // replace BAUDRATE as suggested
  BTSerial.begin(9600);
  Serial.begin(9600);
  BTSerial.print("AT\r\n");
}

void loop() {

  if (BTSerial.available())
    Serial.write(BTSerial.read());

  if (Serial.available()) {

    BTSerial.println("Received Serial Data:");  
    BTSerial.readBytes(serialBuffer, bufferLength);// 将接收到的信息使用readBytes读取
    for(int i=0; i<bufferLength; i++){      // 然后通过串口监视器输出readBytes
      BTSerial.print(serialBuffer[i]);          // 函数所读取的信息
    }
    BTSerial.println("");  
    BTSerial.println("Finished Printing Recevied Data.");

  }
}

此段代码输出依旧不正确,请问各位有什么好的解决方法吗?

  • 写回答

1条回答 默认 最新

  • Rampage_SS 2023-09-04 21:37
    关注

    蓝牙传输数据没丢,就没问题,你这里只是要区分是不是一包,需要自己在包装一层协议。你APP聊天的底层协议应该是收到数据就显示。举个最简单的例子,我要传输12345,对方怎么知道我12345就说完了呢,我告诉他我有同步头和同步尾,同步头是x,同步尾为y,那我传输x12345y,但是因为中途传输网络延迟,对方收到x1,然后是23,然后是4,然后是5,最后收到y。当他收到y后,他就知道我传完了。然后剥离头尾就是12345了。

    评论

    报告相同问题?

    悬赏问题

    • ¥15 编译arm板子的gcc
    • ¥20 C语言用栈实现无向图邻接矩阵广度优先遍历
    • ¥15 C++代码报错问题,c++20协程
    • ¥15 c++图Djikstra算法求最短路径
    • ¥15 Linux操作系统中的,管道通信问题
    • ¥15 ansible tower 卡住
    • ¥15 等间距平面螺旋天线方程式
    • ¥15 通过链接访问,显示514或不是私密连接
    • ¥100 系统自动弹窗,键盘一接上就会
    • ¥50 股票交易系统设计(sql语言)