感谢
首先,感谢安信可举办的活动,
感谢园长审核
作为一个中奖绝缘体,竟然中奖了
这本身就不可思议
我这激动的心,颤抖的手呀
其次,感谢期哥分享的串口下载教程,直接一步到位修改固件,省却了好多弯路
使用ch340给rd03_e雷达烧录固件[有手就行] - Rd-03系列 - 物联网开发者社区-安信可论坛 - Powered by Discuz! (ai-thinker.com)
再次感谢!!!
作品
这次我使用ESP32作为主控点灯,这是作品图
RX引脚连接RD03E OT1
23号引脚接1K电阻连LED
代码
原理,此次串口读取我采用另一种方法
RD03E数据帧一共七位,我直接读取14位,这样保证一定有一个完整的数据帧在里面
然后判断这14位中的起始帧,
根据起始帧读取RD03E的数据
组合距离信息
最后根据距离多少判断是否应该亮灯
#include <Arduino.h>
void setup() {
// 初始化Serial,用于与主机通信,波特率为115200
Serial.begin(115200);
// 初始化Serial2,用于与另一个模块通信,波特率为256000
Serial2.begin(256000);
pinMode(23, OUTPUT);
digitalWrite(23, HIGH);
// 等待串口连接
while (!Serial) {
; // 等待串口初始化
}
// 等待串口连接
while (!Serial2) {
; // 等待串口初始化
}
}
void loop() {
if (Serial2.available()) {
// 定义一个数组来存储从Serial2接收到的数据
uint8_t receivedData[14];
// 从Serial2读取数据
int bytesRead = Serial2.readBytes(receivedData, 14);
// 检查是否读取到足够的字节
if (bytesRead == 14) {
// 遍历把收到的数据发送主机,并测算距离,以16进制格式显示
for (int i = 0; i < bytesRead; i++) {
// Serial.print(receivedData[i], HEX);
// // 如果不是最后一个字节,则添加一个空格作为分隔符
// if (i < bytesRead - 1) {
// Serial.print(" ");
// }
if ((int)receivedData[i] == 0xAA && bytesRead >= i + 5) {
if ((int)receivedData[i + 1] == 0xAA) {
// 确定是测距固件
Serial.print(receivedData[i], HEX);
Serial.print(" ");
Serial.print(receivedData[i + 1], HEX);
Serial.print(" ");
Serial.print(receivedData[i + 2], HEX);
Serial.print(" ");
Serial.print(receivedData[i + 3], HEX);
Serial.print(" ");
Serial.print(receivedData[i + 4], HEX);
Serial.print(" ");
int Ljuli = (int)receivedData[i + 3];
int Hjuli = (int)receivedData[i + 4];
int juli = (Hjuli << 8) | Ljuli;
Serial.print(" :");
Serial.print("距离为:");
Serial.println(juli); // 换行
if (juli < 40) {
digitalWrite(23, LOW);
} else {
digitalWrite(23, HIGH);
}
break;
}
}
}
}
}
}
效果
串口输出
在40cm内
超过40cm
大概到这个距离就不显示了
点灯结束 |