heatonhuang
heatonhuang
这家伙很懒,什么也没写!

注册于 1月前

回答
2
文章
1
关注者
0

已经搞定了, 用mid_enroll_single 0x1d 来录入人脸,就可以了, verify 识别速度非常快

include "radar.h" // 引入头文件

打印雷达的数据在一个128x32的屏幕上,显示动态距离和能量。

include <Arduino.h>

include <SoftwareSerial.h>

include <U8g2lib.h>

// 雷达数据类型

// 帧头部帧内数据长度帧内数据帧尾部
// F4 F3 F2 F1 0D 00 02 AA 02 51 00 00 00 00 3B 00 00 55 00 F8 F7 F6 F5
// 帧头部:0xF4 0xF3 0xF2
// 帧内数据长度:0x0D 0x00
// 帧内数据:0x02 AA 02 51 00 00 00 00 3B 00 00 55 00
// 帧尾部:0xF8 0xF7 0xF6 0xF5

// 帧内数据:
// 0x02 AA 02 51 00 00 00 00 3B 00 00 55 00
// 数据类型 数据头 目标状态 运动目标距离 运动目标能量 静止目标距离 静止目标能量 探测距离 数据尾 校验

int readShort(const uint8_t bytes[2]) // 修改为接受const指针
{
return (bytes[0] | (bytes[1] << 8)); // 小端模式,低位在前
}

void readData(DataPacket &packet, SoftwareSerial &serial)
{
uint8_t data[2] = {0}; // 初始化数组以存储读取的数据,设置为0
serial.readBytes(data, 2);
packet.len = readShort(data);

serial.readBytes(&packet.mtype, sizeof(packet.mtype));
serial.readBytes(&packet.mhead, sizeof(packet.mhead));
serial.readBytes(&packet.status, sizeof(packet.status));

serial.readBytes(data, 2);
packet.yd_dis = readShort(data);
serial.readBytes(&packet.yd_power, sizeof(packet.yd_power));
serial.readBytes(data, 2);
packet.jz_dis = readShort(data);
serial.readBytes(&packet.jz_power, sizeof(packet.jz_power));
serial.readBytes(data, 2);
packet.tc_dis = readShort(data);
serial.readBytes(packet.end, sizeof(packet.end));
}

void displayData(const DataPacket &packet, U8G2 &u8g2)
{
u8g2.setDrawColor(0); // 设置为背景色
u8g2.drawBox(40, 0, 100, 32); // 清除显示区域

u8g2.setDrawColor(1);
// 打印距离
u8g2.drawUTF8(50, 16, ("距离: " + String(packet.yd_dis) + " ").c_str());
u8g2.drawUTF8(50, 31, ("功率: "+String(packet.yd_power)).c_str());
}

void read_data(SoftwareSerial &serial, U8G2 &u8g2)
{
// 读取软件串口数据
uint8_t data;
if (serial.available() > 0)
{ // 使用软件串口读取数据

serial.read(&data, 1);
int head_index = 0; // 当前索引
while (true)
{
  if (serial.available() > 0)
  {
    serial.read(&data, 1);
    if (head_index == 0 && data == 0xf4)
    {
      head_index = 1; // 如果是f4,准备读取下一个字节
    }
    else if (head_index == 1 && data == 0xf3)
    {
      head_index = 2; // 如果是f3,准备读取下一个字节
    }
    else if (head_index == 2 && data == 0xf2)
    {
      head_index = 3; // 如果是f2,准备读取下一个字节
    }
    else if (head_index == 3 && data == 0xf1)
    {
      head_index = 4; // 完整的帧头匹配,准备读取数据
      break;          // 跳出循环,开始读取雷达数据
    }
    else
    {
      head_index = 0; // 如果不匹配,重置索引
    }
  }
}

// 完整的帧头匹配,开始读取数据
DataPacket packet;
readData(packet, serial);
Serial.print("接收到的数据: ");
displayData(packet, u8g2);

}
}

发布
问题