发帖
13 0 0

【雷达灯控】安信可Rd-03E 点灯

timo
论坛元老

11

主题

494

回帖

6327

积分

论坛元老

积分
6327
雷达灯控教程 1173 13 2024-3-20 09:08:17

感谢

首先,感谢安信可举办的活动,

感谢园长审核

作为一个中奖绝缘体,竟然中奖了

这本身就不可思议

我这激动的心,颤抖的手呀

其次,感谢期哥分享的串口下载教程,直接一步到位修改固件,省却了好多弯路

使用ch340给rd03_e雷达烧录固件[有手就行] - Rd-03系列 - 物联网开发者社区-安信可论坛 - Powered by Discuz! (ai-thinker.com)

再次感谢!!!

作品

这次我使用ESP32作为主控点灯,这是作品图

RX引脚连接RD03E OT1

23号引脚接1K电阻连LED

image.png

代码

原理,此次串口读取我采用另一种方法

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;
          }
        }
      }
    }
  }
}

效果

串口输出

VeryCapture_20240319121426.jpg

在40cm内

image.png

超过40cm

大概到这个距离就不显示了
003.jpg

点灯结束

──── 0人觉得很赞 ────

使用道具 举报

2024-3-20 09:14:34
👍
2024-3-20 09:15:24
很赞
2024-3-20 10:10:36
很赞
2024-3-20 10:42:54
2024-3-20 10:44:55
2024-3-20 13:46:53
不错不错!
2024-3-21 14:46:46
2024-3-24 17:28:04
2024-3-24 20:48:35
赞一下
您需要登录后才可以回帖 立即登录
高级模式
12下一页
统计信息
  • 会员数: 28296 个
  • 话题数: 40290 篇