发帖
12 0 0

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

noonezero
论坛元老

27

主题

472

回帖

7647

积分

论坛元老

积分
7647
雷达灯控教程 1553 12 2024-3-19 12:10:55

本帖最后由 noonezero 于 2024-3-22 07:56 编辑

本帖最后由 noonezero 于 2024-3-22 07:49 编辑

本帖最后由 noonezero 于 2024-3-21 21:49 编辑

说明

原来是想用我之前小安派做的智能家居控制器加功能的

不加LVGL正常接收

加了LVGL后,烧录进去就直接无法运行了

暂时还在排查和哪里的代码冲突了

原本的想法也就先暂时搁置了

这次先使用BW16点个灯吧,后续弄好了我在发个帖子

开发板介绍

本次使用的是安信可的双模模组(既可以连接2.4G 也可以 5G)

具体可以看官方资料瑞昱BW系列模组专题 | 安信可科技 (ai-thinker.com)

具体使用可以见我后续帖子,不忙了会陆续更新的

get-start-2

RD03E BW16
VCC 5V
GND GND
OT1 PB2
RX PB1

实物

微信图片_20240321214734.jpg

代码

bool zhen_one = false;       // 判断帧数据第一位 AA
bool zhen_two = false;       // 判断帧数据第二位 AA
int index_num = -1;
char msgarr[3] = {0};            // 接收的数据


void setup() {
  Serial.begin(115200);       // 用于主机通信
  Serial1.begin(256000);    // RD03E通信
  pinMode(PA12, OUTPUT);    // BW16的RGB灯初始化
  pinMode(PA13, OUTPUT);
  pinMode(PA14, OUTPUT);
  while (!Serial);
  while (!Serial1);
  Serial.println("lail,laodi----");
}

void loop() {
  while (Serial1.available() > 0) {
    char msg = Serial1.read();
    // Serial.print(msg, HEX);
    // Serial.print(" ");
    // 开始判断
    if ((int)msg == 0xAA && zhen_one == false){  // 先判断是不是 AA 然后再判断是不是第一字节数据
      zhen_one = true;
      continue; // 防止触发下一个判断
    }

    if((int)msg == 0xAA && zhen_one == true){
      if (zhen_two == false){  // 先判断是不是 AA 然后再判断是不是第二字节数据
        zhen_two = true;
        continue; // 防止触发下一个判断
      }
    }
    if (zhen_one == true && zhen_two == true){
      index_num += 1;
      msgarr[index_num] = msg;
      if(index_num == 2){
        // Serial.print(msgarr[0], HEX);   // 运动微动
        // Serial.print(" ");
        // Serial.print(msgarr[1], HEX);   // 距离低8位
        // Serial.print(" ");
        // Serial.print(msgarr[2], HEX);   // 高8位
        // Serial.println();
        zhen_one = false;
        zhen_two = false;
        index_num = -1;
        if((int)msgarr[0] > 0){
          if((int)msgarr[0] == 1){
            Serial.print("Y: ");
          }
          else{
            Serial.print("W: ");
          }
          int distance = ((int)msgarr[2] << 8) | (int)msgarr[1];
          Serial.println(distance);
          if(distance <= 40){ // 红灯
            digitalWrite(PA12, HIGH);
            digitalWrite(PA13, LOW);
            digitalWrite(PA14, LOW);
          }
          else if(distance > 40 && distance <= 80){ // 蓝灯
            digitalWrite(PA12, LOW);
            digitalWrite(PA13, HIGH);
            digitalWrite(PA14, LOW);
          }
          else if(distance > 80){   // 绿灯
            digitalWrite(PA12, LOW);
            digitalWrite(PA13, LOW);
            digitalWrite(PA14, HIGH);
          }
        }
        else{
          digitalWrite(PA12, HIGH);    // 无目标信息。白光
          digitalWrite(PA13, HIGH);
          digitalWrite(PA14, HIGH);
        }
      }
    }
  }
}

串口输出

image.png

代码详解

在Setup函数中,初始化了串口和RGB引脚 OUTPUT 模式

在loop函数中,判断串口是否有数据,有,读取,先判断连续两个 0XAA,证明是帧头,

接下来开始读取1位目标状态,1运动 2微动

读取2位距离信息,转成16位数据

然后根据距离信息显示不同颜色的灯

显示效果

小于40cm

红灯.jpg

40 - 80蓝灯

蓝灯.jpg

> 80 绿灯

绿灯.jpg

无人状态

无人状态是全亮,白灯。但是不好拍照,就没拍了

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

使用道具 举报

2024-3-19 12:20:25
少司命是什么
2024-3-19 13:39:04
帖子是还没编辑完吗?
2024-3-19 19:44:43
这么短
2024-3-19 20:25:21
2024-3-19 20:42:36
我都喜欢
2024-3-19 20:46:43
2024-3-19 21:45:06
爱笑 发表于 2024-3-19 13:39
帖子是还没编辑完吗?

还没最近忙,会把这个帖子更新完的
2024-3-19 21:47:08
2024-3-20 09:45:05
您需要登录后才可以回帖 立即登录
高级模式
12下一页
统计信息
  • 会员数: 28365 个
  • 话题数: 40400 篇