这一步比较简单
前面我们实现了获取欧拉角,但我们只是看到数据
用这个软件,可以图形化的看到我们四轴的动作
关于软件下载,建议去加群下载官网
匿名科创地面站QQ群
QQ Public Club:190169595。
QQ 开发者Club:194080682(限已购买用户)。
在这里可以看怎么用
另外用这个软件串口工作量还蛮大的,不用的时候建议关掉,可以用if语句,利用一个变量控制与整个软件的通讯,每一个通讯的函数前都加入if
if(pose)ANO_DT_Send_Status();
软件是使用串口通讯,固定接收某些帧头的数据,并解析
我们创建一个新文件,专门放这个软件的函数
飞控状态
这里我们先介绍下飞控状态这里怎么用,其他以后有机会再说
这是示例代码,都是写好的,其实复制过去改点东西就能用
我们先引入该用的头文件,并且把之后用的串口发送函数封装一下,后面用起来方便,不用改了
因为示例代码里面的串口发送都封装成了ANO_DT_Send_Data,所以前面这样写。
#include "anotc.h"
#include "usart.h"
#include "mpu6050.h"
#define BYTE0(dwTemp) ( *( (char *)(&dwTemp) ) )
#define BYTE1(dwTemp) ( *( (char *)(&dwTemp) + 1) )
#define BYTE2(dwTemp) ( *( (char *)(&dwTemp) + 2) )
#define BYTE3(dwTemp) ( *( (char *)(&dwTemp) + 3) )
uint8_t data_to_send[50];
void ANO_DT_Send_Data(uint8_t *dataToSend , uint8_t length)
{
HAL_UART_Transmit(&huart1,dataToSend,length,200);
}
这里是发送状态的函数,其实就改了下变量类型,像u8什么的,咱们这也识别不出来。帧头之类的结构已经写好了,只管用就行。
void ANO_DT_Send_Status(float angle_rol, float angle_pit, float angle_yaw, int32_t alt, uint8_t fly_model, uint8_t armed)
{
uint8_t _cnt=0;
int32_t _temp;
int32_t _temp2 = alt;
data_to_send[_cnt++]=0xAA;
data_to_send[_cnt++]=0xAA;
data_to_send[_cnt++]=0x01;
data_to_send[_cnt++]=0;
_temp = (int)(angle_rol*100);
data_to_send[_cnt++]=BYTE1(_temp);
data_to_send[_cnt++]=BYTE0(_temp);
_temp = (int)(angle_pit*100);
data_to_send[_cnt++]=BYTE1(_temp);
data_to_send[_cnt++]=BYTE0(_temp);
_temp = (int)(angle_yaw*100);
data_to_send[_cnt++]=BYTE1(_temp);
data_to_send[_cnt++]=BYTE0(_temp);
data_to_send[_cnt++]=BYTE3(_temp2);
data_to_send[_cnt++]=BYTE2(_temp2);
data_to_send[_cnt++]=BYTE1(_temp2);
data_to_send[_cnt++]=BYTE0(_temp2);
data_to_send[_cnt++] = fly_model;
data_to_send[_cnt++] = armed;
data_to_send[3] = _cnt-4;
uint8_t sum = 0;
for(uint8_t i=0;i<_cnt;i++)
sum += data_to_send[i];
data_to_send[_cnt++]=sum;
ANO_DT_Send_Data(data_to_send, _cnt);
}
测试
现在我们去主函数调用一下看看就好,因为还没有用后面三个变量,我就随便写了。
mpu_dmp_get_data(&pitch,&roll,&yaw);
ANO_DT_Send_Status(roll,pitch,yaw,0,0,1);
到这里,基本就可以用这个软件看看自己飞控的情况了