LD2450解析代码

发布于 2026-01-01 15:33:07

我使用一块LD2450搭配两块ESP32S3,用ESPNOW通信,一端接雷达,一端显示可是始终解析的不对AIGC给的结果也不对.下面的代码是arduino的解析代码,搭配了AIGC去写的
/ ---------- 工具:小端 S16 → 米 / cm ---------- /
static int16_t rawS16(byte lo, byte hi) {
return (int16_t)(lo | (hi << 8));
}

/ 按图例符号位规则 → 米(或 cm) /
static double parseCoord(byte lo, byte hi) {
int16_t raw = rawS16(lo, hi);
if (raw & 0x8000) { // 最高位 1 → 正坐标

return (raw - 32768) / 1000.0;  // 正:raw - 2^15 → m

} else { // 最高位 0 → 负坐标

return -raw / 1000.0;           // 负:0 - raw → m

}
}

/ ---------- 收到 38 字节 ---------- /
void onRecv(const uint8_t mac, const uint8_t data, int len) {
if (len != 38) return;

double x1 = parseCoord(data[4], data[5]); // T1 X 米
double y1 = parseCoord(data[6], data[7]); // T1 Y 米
double v1 = parseCoord(data[8], data[9]) * 10; // T1 速度 cm/s

double x2 = parseCoord(data[16], data[17]); // T2 X 米
double y2 = parseCoord(data[18], data[19]); // T2 Y 米
double v2 = parseCoord(data[20], data[21]) * 10; // T2 速度 cm/s

double x3 = parseCoord(data[28], data[29]); // T3 X 米
double y3 = parseCoord(data[30], data[31]); // T3 Y 米
double v3 = parseCoord(data[32], data[33]) * 10; // T3 速度 cm/s

/ 串口:原始 16 进制 + 解析后物理量 /
Serial.printf("原始 X:0x%02X%02X Y:0x%02X%02X → X1=%+6.2f m Y1=%+6.2f m V1=%+6.2f cm/s X2=%+6.2f m Y2=%+6.2f m V2=%+6.2f cm/s X3=%+6.2f m Y3=%+6.2f m V3=%+6.2f cm/sn",

            data[5], data[4], data[7], data[6], x1, y1, v1,
            data[17], data[16], data[19], data[18], x2, y2, v2,
            data[29], data[28], data[31], data[30], x3, y3, v3);

}

查看更多

关注者
0
被浏览
28
0 个回答
暂无答案,快来添加答案吧

撰写答案

请登录后再发布答案,点击登录

发布
问题

deepseek
客服

分享
好友

手机
浏览

扫码手机浏览