gym2028
暂时没有例程,贴一些解析代码吧
雷达的数据结构和解析函数:
#include <math.h>
#include <stdint.h>
typedef struct datapos
{
int xPos;
int yPos;
int theta;
int dist;
} DataPos;
// 解析 XenP202TT01 的数据
UINT8 decode_XenP202TT01(char *buf, DataPos *data)
{
UINT8 *p = buf + 4;
uint16_t temp;
for (UINT8 i = 0; i < 3; i++)
{
temp = p[0] + ((uint16_t)p[1] << 8);
data[i].xPos = temp & 0x8000 ? temp & (~0x8000) : -temp;
temp = p[2] + ((uint16_t)p[3] << 8);
data[i].yPos = temp & 0x8000 ? temp & (~0x8000) : -temp;
data[i].dist = sqrtf((float)((long)data[i].xPos * data[i].xPos + (long)data[i].yPos * data[i].yPos));
data[i].theta = atan2f((float)data[i].xPos, (float)data[i].yPos) * (180.0f / PI);
data[i].theta = data[i].theta;
p += 8;
}
return 0;
}
用法:
DataPos dataXenP202TT01[3];
decode_XenP202TT01(recvBuf, dataXenP202TT01);
printf("X :%5d\t", dataXenP202TT01[0].xPos);
printf("Y :%5d\t", dataXenP202TT01[0].yPos);
printf("angle :%5d\t", dataXenP202TT01[0].theta);
printf("Dist :%5d\r\n", dataXenP202TT01[0].dist);
这里 recvBuf
是 XenP202TT01 的 30 字节完整数据帧,所以文中代码的串口接收包长度要改成30。
帧头帧尾可能也要改下,似乎 202 有两种帧尾结构,以你手里的那个为准。