我在用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.");
}
}
此段代码输出依旧不正确,请问各位有什么好的解决方法吗?