实例介绍
【实例简介】
【实例截图】
【核心代码】/******************** (C) COPYRIGHT 2014 ANO Tech ********************************
**********************************************************************************/
//#include "data_transfer.h"
#include "usart.h"
//#include "imu.h"
#include "mpu6050.h"
//#include "ak8975.h"
//#include "ms5611.h"
//#include "rc.h"
//#include "ctrl.h"
#include "time.h"
//#include "usbd_user_hid.h"
#include "ANO_DT.h"
#include "stm32f10x.h"
#include "v2.6.h"
#include "mpu6050.h"
#include "inv_mpu.h"
#include "inv_mpu_dmp_motion_driver.h"
/////////////////////////////////////////////////////////////////////////////////////
//Êý¾Ý²ð·Öºê¶¨Ò壬ÔÚ·¢ËÍ´óÓÚ1×Ö½ÚµÄÊý¾ÝÀàÐÍʱ£¬±ÈÈçint16¡¢floatµÈ£¬ÐèÒª°ÑÊý¾Ý²ð·Ö³Éµ¥¶À×Ö½Ú½øÐз¢ËÍ
#define BYTE0(dwTemp) ( *( (char *)(&dwTemp) ) )
#define BYTE1(dwTemp) ( *( (char *)(&dwTemp) 1) )
#define BYTE2(dwTemp) ( *( (char *)(&dwTemp) 2) )
#define BYTE3(dwTemp) ( *( (char *)(&dwTemp) 3) )
float pit,rol,ya; //Å·À½Ç
u8 pitch,roll,yaw; //Å·À½Ç
u8 aacx,aacy,aacz; //¼ÓËÙ¶È´«¸ÐÆ÷ÔʼÊý¾Ý
u8 gyrox,gyroy,gyroz; //ÍÓÂÝÒÇÔʼÊý¾Ý
short acx,acy,acz; //¼ÓËÙ¶È´«¸ÐÆ÷ÔʼÊý¾Ý
short grox,groy,groz; //ÍÓÂÝÒÇÔʼÊý¾Ý
float rollkp=800,rollki=500,rollkd=30,pitchkp=500,pitchki=200,pitchkd=35,yawkp=700,yawki=30,yawkd=40;
dt_flag_t f; //ÐèÒª·¢ËÍÊý¾ÝµÄ±êÖ¾
u8 data_to_send[50]; //·¢ËÍÊý¾Ý»º´æ
/////////////////////////////////////////////////////////////////////////////////////
void ANO_DT_Send_Data(u8*data_to_send, u8 _cnt)
{ int i;
for(i=0;i<_cnt;i ) usart1_send_char(data_to_send[i]);
}
//Data_Exchangeº¯Êý´¦Àí¸÷ÖÖÊý¾Ý·¢ËÍÇëÇ󣬱ÈÈçÏëʵÏÖÿ5ms·¢ËÍÒ»´Î´«¸ÐÆ÷Êý¾ÝÖÁÉÏλ»ú£¬¼´Ôڴ˺¯ÊýÄÚʵÏÖ
//´Ëº¯ÊýÓ¦ÓÉÓû§Ã¿1msµ÷ÓÃÒ»´Î
void ANO_DT_Data_Exchange(void)
{
static u8 cnt = 0;
static u8 senser_cnt = 10;
static u8 status_cnt = 15;
static u8 rcdata_cnt = 20;
static u8 motopwm_cnt = 20;
static u8 power_cnt = 50;
MPU_Get_Accelerometer(&acx,&acy,&acz); //µÃµ½¼ÓËÙ¶È´«¸ÐÆ÷Êý¾Ý
MPU_Get_Gyroscope(&grox,&groy,&groz); //µÃµ½ÍÓÂÝÒÇÊý¾Ý
mpu_dmp_get_data(&pit,&rol,&ya);
if((cnt % senser_cnt) == (senser_cnt-1))
f.send_senser = 1;
if((cnt % status_cnt) == (status_cnt-1))
f.send_status = 1;
if((cnt % rcdata_cnt) == (rcdata_cnt-1))
f.send_rcdata = 1;
if((cnt % motopwm_cnt) == (motopwm_cnt-1))
f.send_motopwm = 1;
if((cnt % power_cnt) == (power_cnt-1))
f.send_power = 1;
cnt ;
/////////////////////////////////////////////////////////////////////////////////////
if(f.send_version) //°æ±¾ÐÅÏ¢
{
f.send_version = 0;
ANO_DT_Send_Version(4,300,100,400,0);
}
/////////////////////////////////////////////////////////////////////////////////////
else if(f.send_status) //pit roll yaw ¸ß¶È ·ÉÐÐģʽ 0½âËø 1¼ÓËø
{
f.send_status = 0;
roll=rol;
pitch=pit;
yaw=ya;
ANO_DT_Send_Status(rol,pit,ya,500,1,1);//¸ßµÄcm
}
/////////////////////////////////////////////////////////////////////////////////////
else if(f.send_senser)
{
f.send_senser = 0;
aacx=acx;
aacy=acy;
aacz=acz;
gyrox=grox;
gyroy=groy;
gyroz=groz;
ANO_DT_Send_Senser(aacx,aacy,aacz,
gyrox,gyroy,gyroz,
0,0,0,0);
}
/////////////////////////////////////////////////////////////////////////////////////
// else if(f.send_rcdata)
// {
// f.send_rcdata = 0;
// ANO_DT_Send_RCData(Rc_Pwm_In[0],Rc_Pwm_In[1],Rc_Pwm_In[2],Rc_Pwm_In[3],Rc_Pwm_In[4],Rc_Pwm_In[5],Rc_Pwm_In[6],Rc_Pwm_In[7],0,0);
// }
/////////////////////////////////////////////////////////////////////////////////////
else if(f.send_motopwm)
{
f.send_motopwm = 0;
ANO_DT_Send_MotoPWM(900,2,5,10000,8,6,6,8);
}
/////////////////////////////////////////////////////////////////////////////////////
else if(f.send_power)
{
f.send_power = 0;
ANO_DT_Send_Power(234,456); //µçѹ µçÁ÷
}
/////////////////////////////////////////////////////////////////////////////////////
else if(f.send_pid1)
{
f.send_pid1 = 0;
ANO_DT_Send_PID(1,rollkp,rollki,rollkd,pitchkp,pitchki,pitchkd,yawkp,yawki,yawkd);
}
/////////////////////////////////////////////////////////////////////////////////////
else if(f.send_pid2)
{
f.send_pid2 = 0;
//ANO_DT_Send_PID(2,p1_p,p1_i,p1_d,p2_p,p2_i,p2_d,p3_p,p3_i,p3_d);
}
/////////////////////////////////////////////////////////////////////////////////////
else if(f.send_pid3)
{
f.send_pid3 = 0;
//ANO_DT_Send_PID(3,p1_p,p1_i,p1_d,p2_p,p2_i,p2_d,p3_p,p3_i,p3_d);
}
///////////////////////////////////////////////////////////////////////////////////////
}
///////////////////////////////////////////////////////////////////////////////////////
////Send_Dataº¯ÊýÊÇÐÒéÖÐËùÓз¢ËÍÊý¾Ý¹¦ÄÜʹÓõ½µÄ·¢Ëͺ¯Êý
////ÒÆÖ²Ê±£¬Óû§Ó¦¸ù¾Ý×ÔÉíÓ¦ÓõÄÇé¿ö£¬¸ù¾ÝʹÓõÄͨÐÅ·½Ê½£¬ÊµÏִ˺¯Êý
//void ANO_DT_Send_Data(u8 *dataToSend , u8 length)
//{
//#ifdef ANO_DT_USE_USB_HID
// Usb_Hid_Adddata(data_to_send,length);
//#endif
//#ifdef ANO_DT_USE_USART2
// Usart2_Send(data_to_send, length);
//#endif
//}
static void ANO_DT_Send_Check(u8 head, u8 check_sum)
{ u8 sum = 0,i;
data_to_send[0]=0xAA;
data_to_send[1]=0xAA;
data_to_send[2]=0xEF;
data_to_send[3]=2;
data_to_send[4]=head;
data_to_send[5]=check_sum;
for(i=0;i<6;i )
sum = data_to_send[i];
data_to_send[6]=sum;
ANO_DT_Send_Data(data_to_send, 7);
}
/////////////////////////////////////////////////////////////////////////////////////
//Data_Receive_Prepareº¯ÊýÊÇÐÒéÔ¤½âÎö£¬¸ù¾ÝÐÒéµÄ¸ñʽ£¬½«ÊÕµ½µÄÊý¾Ý½øÐÐÒ»´Î¸ñʽÐÔ½âÎö£¬¸ñʽÕýÈ·µÄ»°ÔÙ½øÐÐÊý¾Ý½âÎö
//ÒÆÖ²Ê±£¬´Ëº¯ÊýÓ¦ÓÉÓû§¸ù¾Ý×ÔÉíʹÓõÄͨÐÅ·½Ê½×ÔÐе÷Ó㬱ÈÈç´®¿ÚÿÊÕµ½Ò»×Ö½ÚÊý¾Ý£¬Ôòµ÷Óô˺¯ÊýÒ»´Î
//´Ëº¯Êý½âÎö³ö·ûºÏ¸ñʽµÄÊý¾ÝÖ¡ºó£¬»á×ÔÐе÷ÓÃÊý¾Ý½âÎöº¯Êý
void ANO_DT_Data_Receive_Prepare(u8 data)
{
static u8 RxBuffer[50];
static u8 _data_len = 0,_data_cnt = 0;
static u8 state = 0;
if(state==0&&data==0xAA)
{
state=1;
RxBuffer[0]=data;
}
else if(state==1&&data==0xAF)
{
state=2;
RxBuffer[1]=data;
}
else if(state==2&&data<0XF1)
{
state=3;
RxBuffer[2]=data;
}
else if(state==3&&data<50)
{
state = 4;
RxBuffer[3]=data;
_data_len = data;
_data_cnt = 0;
}
else if(state==4&&_data_len>0)
{
_data_len--;
RxBuffer[4 _data_cnt ]=data;
if(_data_len==0)
state = 5;
}
else if(state==5)
{
state = 0;
RxBuffer[4 _data_cnt]=data;
ANO_DT_Data_Receive_Anl(RxBuffer,_data_cnt 5);
}
else
state = 0;
}
/////////////////////////////////////////////////////////////////////////////////////
//Data_Receive_Anlº¯ÊýÊÇÐÒéÊý¾Ý½âÎöº¯Êý£¬º¯Êý²ÎÊýÊÇ·ûºÏÐÒé¸ñʽµÄÒ»¸öÊý¾ÝÖ¡£¬¸Ãº¯Êý»áÊ×ÏȶÔÐÒéÊý¾Ý½øÐÐУÑé
//УÑéͨ¹ýºó¶ÔÊý¾Ý½øÐнâÎö£¬ÊµÏÖÏàÓ¦¹¦ÄÜ
//´Ëº¯Êý¿ÉÒÔ²»ÓÃÓû§×ÔÐе÷Óã¬Óɺ¯ÊýData_Receive_Prepare×Ô¶¯µ÷ÓÃ
void ANO_DT_Data_Receive_Anl(u8 *data_buf,u8 num)
{
u8 sum = 0,i;
for(i=0;i<(num-1);i )
sum = *(data_buf i);
if(!(sum==*(data_buf num-1))) return; //ÅжÏsum
if(!(*(data_buf)==0xAA && *(data_buf 1)==0xAF)) return; //ÅжÏÖ¡Í·
// if(*(data_buf 2)==0X01) //mpu6050µ÷Áã
// {
// if(*(data_buf 4)==0X01)
// mpu6050.Acc_CALIBRATE = 1;
// if(*(data_buf 4)==0X02)
// mpu6050.Gyro_CALIBRATE = 1;
// if(*(data_buf 4)==0X03)
// {
// mpu6050.Acc_CALIBRATE = 1;
// mpu6050.Gyro_CALIBRATE = 1;
// }
// }
//
if(*(data_buf 2)==0X02) //¶ÁÈ¡pid
{
if(*(data_buf 4)==0X01)
{
f.send_pid1 = 1;
f.send_pid2 = 1;
f.send_pid3 = 1;
f.send_pid4 = 1;
f.send_pid5 = 1;
f.send_pid6 = 1;
}
if(*(data_buf 4)==0X02)
{
}
if(*(data_buf 4)==0XA0) //¶ÁÈ¡°æ±¾ÐÅÏ¢
{
f.send_version = 1;
}
if(*(data_buf 4)==0XA1) //»Ö¸´Ä¬ÈϲÎÊý
{
//Para_ResetToFactorySetup();
}
}
if(*(data_buf 2)==0X10) //PID1
{
rollkp = 0.001*( (vs16)(*(data_buf 4)<<8)|*(data_buf 5) );
rollki = 0.001*( (vs16)(*(data_buf 6)<<8)|*(data_buf 7) );
rollkd = 0.001*( (vs16)(*(data_buf 8)<<8)|*(data_buf 9) );
pitchkp = 0.001*( (vs16)(*(data_buf 10)<<8)|*(data_buf 11) );
pitchki = 0.001*( (vs16)(*(data_buf 12)<<8)|*(data_buf 13) );
pitchkd = 0.001*( (vs16)(*(data_buf 14)<<8)|*(data_buf 15) );
yawkp = 0.001*( (vs16)(*(data_buf 16)<<8)|*(data_buf 17) );
yawki = 0.001*( (vs16)(*(data_buf 18)<<8)|*(data_buf 19) );
yawkd = 0.001*( (vs16)(*(data_buf 20)<<8)|*(data_buf 21) );
ANO_DT_Send_Check(*(data_buf 2),sum);
//Param_SavePID();
}
if(*(data_buf 2)==0X11) //PID2
{
// ctrl_1.PID[PID4].kp = 0.001*( (vs16)(*(data_buf 4)<<8)|*(data_buf 5) );
// ctrl_1.PID[PID4].ki = 0.001*( (vs16)(*(data_buf 6)<<8)|*(data_buf 7) );
// ctrl_1.PID[PID4].kd = 0.001*( (vs16)(*(data_buf 8)<<8)|*(data_buf 9) );
// ctrl_1.PID[PID5].kp = 0.001*( (vs16)(*(data_buf 10)<<8)|*(data_buf 11) );
// ctrl_1.PID[PID5].ki = 0.001*( (vs16)(*(data_buf 12)<<8)|*(data_buf 13) );
// ctrl_1.PID[PID5].kd = 0.001*( (vs16)(*(data_buf 14)<<8)|*(data_buf 15) );
// ctrl_1.PID[PID6].kp = 0.001*( (vs16)(*(data_buf 16)<<8)|*(data_buf 17) );
// ctrl_1.PID[PID6].ki = 0.001*( (vs16)(*(data_buf 18)<<8)|*(data_buf 19) );
// ctrl_1.PID[PID6].kd = 0.001*( (vs16)(*(data_buf 20)<<8)|*(data_buf 21) );
ANO_DT_Send_Check(*(data_buf 2),sum);
//Param_SavePID();
}
if(*(data_buf 2)==0X12) //PID3
{
// ctrl_2.PID[PIDROLL].kp = 0.001*( (vs16)(*(data_buf 4)<<8)|*(data_buf 5) );
// ctrl_2.PID[PIDROLL].ki = 0.001*( (vs16)(*(data_buf 6)<<8)|*(data_buf 7) );
// ctrl_2.PID[PIDROLL].kd = 0.001*( (vs16)(*(data_buf 8)<<8)|*(data_buf 9) );
// ctrl_2.PID[PIDPITCH].kp = 0.001*( (vs16)(*(data_buf 10)<<8)|*(data_buf 11) );
// ctrl_2.PID[PIDPITCH].ki = 0.001*( (vs16)(*(data_buf 12)<<8)|*(data_buf 13) );
// ctrl_2.PID[PIDPITCH].kd = 0.001*( (vs16)(*(data_buf 14)<<8)|*(data_buf 15) );
// ctrl_2.PID[PIDYAW].kp = 0.001*( (vs16)(*(data_buf 16)<<8)|*(data_buf 17) );
// ctrl_2.PID[PIDYAW].ki = 0.001*( (vs16)(*(data_buf 18)<<8)|*(data_buf 19) );
// ctrl_2.PID[PIDYAW].kd = 0.001*( (vs16)(*(data_buf 20)<<8)|*(data_buf 21) );
ANO_DT_Send_Check(*(data_buf 2),sum);
//Param_SavePID();
}
if(*(data_buf 2)==0X13) //PID4
{
ANO_DT_Send_Check(*(data_buf 2),sum);
}
if(*(data_buf 2)==0X14) //PID5
{
ANO_DT_Send_Check(*(data_buf 2),sum);
}
if(*(data_buf 2)==0X15) //PID6
{
ANO_DT_Send_Check(*(data_buf 2),sum);
}
}
void ANO_DT_Send_Version(u8 hardware_type, u16 hardware_ver,u16 software_ver,u16 protocol_ver,u16 bootloader_ver)
{
u8 _cnt=0,i,sum = 0;
data_to_send[_cnt ]=0xAA;
data_to_send[_cnt ]=0xAA;
data_to_send[_cnt ]=0x00;
data_to_send[_cnt ]=0;
data_to_send[_cnt ]=hardware_type;
data_to_send[_cnt ]=BYTE1(hardware_ver);
data_to_send[_cnt ]=BYTE0(hardware_ver);
data_to_send[_cnt ]=BYTE1(software_ver);
data_to_send[_cnt ]=BYTE0(software_ver);
data_to_send[_cnt ]=BYTE1(protocol_ver);
data_to_send[_cnt ]=BYTE0(protocol_ver);
data_to_send[_cnt ]=BYTE1(bootloader_ver);
data_to_send[_cnt ]=BYTE0(bootloader_ver);
data_to_send[3] = _cnt-4;
for(i=0;i<_cnt;i )
sum = data_to_send[i];
data_to_send[_cnt ]=sum;
ANO_DT_Send_Data(data_to_send, _cnt);
}
void ANO_DT_Send_Status(float angle_rol, float angle_pit, float angle_yaw, s32 alt, u8 fly_model, u8 armed)
{
u8 _cnt=0;
vs16 _temp;
vs32 _temp2 = alt;
int i;
int sum = 0;
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;
// int sum = 0;
for(i=0;i<_cnt;i )
sum = data_to_send[i];
data_to_send[_cnt ]=sum;
//for(i=0;i<_cnt;i ) usart1_send_char(data_to_send[i]);
ANO_DT_Send_Data(data_to_send, _cnt);
}
void ANO_DT_Send_Senser(s16 a_x,s16 a_y,s16 a_z,s16 g_x,s16 g_y,s16 g_z,s16 m_x,s16 m_y,s16 m_z,s32 bar)
{
u8 _cnt=0,sum = 0,i;
vs16 _temp;
data_to_send[_cnt ]=0xAA;
data_to_send[_cnt ]=0xAA;
data_to_send[_cnt ]=0x02;
data_to_send[_cnt ]=0;
_temp = a_x;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = a_y;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = a_z;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = g_x;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = g_y;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = g_z;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = m_x;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = m_y;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = m_z;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
data_to_send[3] = _cnt-4;
for(i=0;i<_cnt;i )
sum = data_to_send[i];
data_to_send[_cnt ] = sum;
ANO_DT_Send_Data(data_to_send, _cnt);
}
void ANO_DT_Send_RCData(u16 thr,u16 yaw,u16 rol,u16 pit,u16 aux1,u16 aux2,u16 aux3,u16 aux4,u16 aux5,u16 aux6)
{
u8 _cnt=0,i,sum = 0;
data_to_send[_cnt ]=0xAA;
data_to_send[_cnt ]=0xAA;
data_to_send[_cnt ]=0x03;
data_to_send[_cnt ]=0;
data_to_send[_cnt ]=BYTE1(thr);
data_to_send[_cnt ]=BYTE0(thr);
data_to_send[_cnt ]=BYTE1(yaw);
data_to_send[_cnt ]=BYTE0(yaw);
data_to_send[_cnt ]=BYTE1(rol);
data_to_send[_cnt ]=BYTE0(rol);
data_to_send[_cnt ]=BYTE1(pit);
data_to_send[_cnt ]=BYTE0(pit);
data_to_send[_cnt ]=BYTE1(aux1);
data_to_send[_cnt ]=BYTE0(aux1);
data_to_send[_cnt ]=BYTE1(aux2);
data_to_send[_cnt ]=BYTE0(aux2);
data_to_send[_cnt ]=BYTE1(aux3);
data_to_send[_cnt ]=BYTE0(aux3);
data_to_send[_cnt ]=BYTE1(aux4);
data_to_send[_cnt ]=BYTE0(aux4);
data_to_send[_cnt ]=BYTE1(aux5);
data_to_send[_cnt ]=BYTE0(aux5);
data_to_send[_cnt ]=BYTE1(aux6);
data_to_send[_cnt ]=BYTE0(aux6);
data_to_send[3] = _cnt-4;
for(i=0;i<_cnt;i )
sum = data_to_send[i];
data_to_send[_cnt ]=sum;
ANO_DT_Send_Data(data_to_send, _cnt);
}
void ANO_DT_Send_Power(u16 votage, u16 current)
{
u8 _cnt=0,i,sum=0;
u16 temp;
data_to_send[_cnt ]=0xAA;
data_to_send[_cnt ]=0xAA;
data_to_send[_cnt ]=0x05;
data_to_send[_cnt ]=0;
temp = votage;
data_to_send[_cnt ]=BYTE1(temp);
data_to_send[_cnt ]=BYTE0(temp);
temp = current;
data_to_send[_cnt ]=BYTE1(temp);
data_to_send[_cnt ]=BYTE0(temp);
data_to_send[3] = _cnt-4;
for(i=0;i<_cnt;i )
sum = data_to_send[i];
data_to_send[_cnt ]=sum;
ANO_DT_Send_Data(data_to_send, _cnt);
}
void ANO_DT_Send_MotoPWM(u16 m_1,u16 m_2,u16 m_3,u16 m_4,u16 m_5,u16 m_6,u16 m_7,u16 m_8)
{
u8 _cnt=0,i,sum = 0;
data_to_send[_cnt ]=0xAA;
data_to_send[_cnt ]=0xAA;
data_to_send[_cnt ]=0x06;
data_to_send[_cnt ]=0;
data_to_send[_cnt ]=BYTE1(m_1);
data_to_send[_cnt ]=BYTE0(m_1);
data_to_send[_cnt ]=BYTE1(m_2);
data_to_send[_cnt ]=BYTE0(m_2);
data_to_send[_cnt ]=BYTE1(m_3);
data_to_send[_cnt ]=BYTE0(m_3);
data_to_send[_cnt ]=BYTE1(m_4);
data_to_send[_cnt ]=BYTE0(m_4);
data_to_send[_cnt ]=BYTE1(m_5);
data_to_send[_cnt ]=BYTE0(m_5);
data_to_send[_cnt ]=BYTE1(m_6);
data_to_send[_cnt ]=BYTE0(m_6);
data_to_send[_cnt ]=BYTE1(m_7);
data_to_send[_cnt ]=BYTE0(m_7);
data_to_send[_cnt ]=BYTE1(m_8);
data_to_send[_cnt ]=BYTE0(m_8);
data_to_send[3] = _cnt-4;
for(i=0;i<_cnt;i )
sum = data_to_send[i];
data_to_send[_cnt ]=sum;
ANO_DT_Send_Data(data_to_send, _cnt);
}
void ANO_DT_Send_PID(u8 group,float p1_p,float p1_i,float p1_d,float p2_p,float p2_i,float p2_d,float p3_p,float p3_i,float p3_d)
{
u8 _cnt=0,i,sum = 0;
vs16 _temp;
data_to_send[_cnt ]=0xAA;
data_to_send[_cnt ]=0xAA;
data_to_send[_cnt ]=0x10 group-1;
data_to_send[_cnt ]=0;
_temp = p1_p ;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = p1_i ;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = p1_d ;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = p2_p ;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = p2_i ;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = p2_d ;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = p3_p ;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = p3_i ;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = p3_d ;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
data_to_send[3] = _cnt-4;
for(i=0;i<_cnt;i )
sum = data_to_send[i];
data_to_send[_cnt ]=sum;
ANO_DT_Send_Data(data_to_send, _cnt);
}
/******************* (C) COPYRIGHT 2014 ANO TECH *****END OF FILE************/
【实例截图】
【核心代码】/******************** (C) COPYRIGHT 2014 ANO Tech ********************************
/******************** (C) COPYRIGHT 2014 ANO Tech ******************************** * ×÷Õß £ºÄäÃû¿Æ´´ * ÎļþÃû £ºdata_transfer.c * ÃèÊö £ºÊý¾Ý´«Êä * ¹ÙÍø £ºwww.anotc.com * ÌÔ±¦ £ºanotc.taobao.com * ¼¼ÊõQȺ £º190169595 **********************************************************************************/ //#include "data_transfer.h" #include "usart.h" //#include "imu.h" #include "mpu6050.h" //#include "ak8975.h" //#include "ms5611.h" //#include "rc.h" //#include "ctrl.h" #include "time.h" //#include "usbd_user_hid.h" #include "ANO_DT.h" #include "stm32f10x.h" #include "v2.6.h" #include "mpu6050.h" #include "inv_mpu.h" #include "inv_mpu_dmp_motion_driver.h" ///////////////////////////////////////////////////////////////////////////////////// //Êý¾Ý²ð·Öºê¶¨Ò壬ÔÚ·¢ËÍ´óÓÚ1×Ö½ÚµÄÊý¾ÝÀàÐÍʱ£¬±ÈÈçint16¡¢floatµÈ£¬ÐèÒª°ÑÊý¾Ý²ð·Ö³Éµ¥¶À×Ö½Ú½øÐз¢ËÍ #define BYTE0(dwTemp) ( *( (char *)(&dwTemp) ) ) #define BYTE1(dwTemp) ( *( (char *)(&dwTemp) 1) ) #define BYTE2(dwTemp) ( *( (char *)(&dwTemp) 2) ) #define BYTE3(dwTemp) ( *( (char *)(&dwTemp) 3) ) float pit,rol,ya; //Å·À½Ç u8 pitch,roll,yaw; //Å·À½Ç u8 aacx,aacy,aacz; //¼ÓËÙ¶È´«¸ÐÆ÷ÔʼÊý¾Ý u8 gyrox,gyroy,gyroz; //ÍÓÂÝÒÇÔʼÊý¾Ý short acx,acy,acz; //¼ÓËÙ¶È´«¸ÐÆ÷ÔʼÊý¾Ý short grox,groy,groz; //ÍÓÂÝÒÇÔʼÊý¾Ý float rollkp=800,rollki=500,rollkd=30,pitchkp=500,pitchki=200,pitchkd=35,yawkp=700,yawki=30,yawkd=40; dt_flag_t f; //ÐèÒª·¢ËÍÊý¾ÝµÄ±êÖ¾ u8 data_to_send[50]; //·¢ËÍÊý¾Ý»º´æ ///////////////////////////////////////////////////////////////////////////////////// void ANO_DT_Send_Data(u8*data_to_send, u8 _cnt) { int i; for(i=0;i<_cnt;i ) usart1_send_char(data_to_send[i]); } //Data_Exchangeº¯Êý´¦Àí¸÷ÖÖÊý¾Ý·¢ËÍÇëÇ󣬱ÈÈçÏëʵÏÖÿ5ms·¢ËÍÒ»´Î´«¸ÐÆ÷Êý¾ÝÖÁÉÏλ»ú£¬¼´Ôڴ˺¯ÊýÄÚʵÏÖ //´Ëº¯ÊýÓ¦ÓÉÓû§Ã¿1msµ÷ÓÃÒ»´Î void ANO_DT_Data_Exchange(void) { static u8 cnt = 0; static u8 senser_cnt = 10; static u8 status_cnt = 15; static u8 rcdata_cnt = 20; static u8 motopwm_cnt = 20; static u8 power_cnt = 50; MPU_Get_Accelerometer(&acx,&acy,&acz); //µÃµ½¼ÓËÙ¶È´«¸ÐÆ÷Êý¾Ý MPU_Get_Gyroscope(&grox,&groy,&groz); //µÃµ½ÍÓÂÝÒÇÊý¾Ý mpu_dmp_get_data(&pit,&rol,&ya); if((cnt % senser_cnt) == (senser_cnt-1)) f.send_senser = 1; if((cnt % status_cnt) == (status_cnt-1)) f.send_status = 1; if((cnt % rcdata_cnt) == (rcdata_cnt-1)) f.send_rcdata = 1; if((cnt % motopwm_cnt) == (motopwm_cnt-1)) f.send_motopwm = 1; if((cnt % power_cnt) == (power_cnt-1)) f.send_power = 1; cnt ; ///////////////////////////////////////////////////////////////////////////////////// if(f.send_version) //°æ±¾ÐÅÏ¢ { f.send_version = 0; ANO_DT_Send_Version(4,300,100,400,0); } ///////////////////////////////////////////////////////////////////////////////////// else if(f.send_status) //pit roll yaw ¸ß¶È ·ÉÐÐģʽ 0½âËø 1¼ÓËø { f.send_status = 0; roll=rol; pitch=pit; yaw=ya; ANO_DT_Send_Status(rol,pit,ya,500,1,1);//¸ßµÄcm } ///////////////////////////////////////////////////////////////////////////////////// else if(f.send_senser) { f.send_senser = 0; aacx=acx; aacy=acy; aacz=acz; gyrox=grox; gyroy=groy; gyroz=groz; ANO_DT_Send_Senser(aacx,aacy,aacz, gyrox,gyroy,gyroz, 0,0,0,0); } ///////////////////////////////////////////////////////////////////////////////////// // else if(f.send_rcdata) // { // f.send_rcdata = 0; // ANO_DT_Send_RCData(Rc_Pwm_In[0],Rc_Pwm_In[1],Rc_Pwm_In[2],Rc_Pwm_In[3],Rc_Pwm_In[4],Rc_Pwm_In[5],Rc_Pwm_In[6],Rc_Pwm_In[7],0,0); // } ///////////////////////////////////////////////////////////////////////////////////// else if(f.send_motopwm) { f.send_motopwm = 0; ANO_DT_Send_MotoPWM(900,2,5,10000,8,6,6,8); } ///////////////////////////////////////////////////////////////////////////////////// else if(f.send_power) { f.send_power = 0; ANO_DT_Send_Power(234,456); //µçѹ µçÁ÷ } ///////////////////////////////////////////////////////////////////////////////////// else if(f.send_pid1) { f.send_pid1 = 0; ANO_DT_Send_PID(1,rollkp,rollki,rollkd,pitchkp,pitchki,pitchkd,yawkp,yawki,yawkd); } ///////////////////////////////////////////////////////////////////////////////////// else if(f.send_pid2) { f.send_pid2 = 0; //ANO_DT_Send_PID(2,p1_p,p1_i,p1_d,p2_p,p2_i,p2_d,p3_p,p3_i,p3_d); } ///////////////////////////////////////////////////////////////////////////////////// else if(f.send_pid3) { f.send_pid3 = 0; //ANO_DT_Send_PID(3,p1_p,p1_i,p1_d,p2_p,p2_i,p2_d,p3_p,p3_i,p3_d); } /////////////////////////////////////////////////////////////////////////////////////// } /////////////////////////////////////////////////////////////////////////////////////// ////Send_Dataº¯ÊýÊÇÐÒéÖÐËùÓз¢ËÍÊý¾Ý¹¦ÄÜʹÓõ½µÄ·¢Ëͺ¯Êý ////ÒÆÖ²Ê±£¬Óû§Ó¦¸ù¾Ý×ÔÉíÓ¦ÓõÄÇé¿ö£¬¸ù¾ÝʹÓõÄͨÐÅ·½Ê½£¬ÊµÏִ˺¯Êý //void ANO_DT_Send_Data(u8 *dataToSend , u8 length) //{ //#ifdef ANO_DT_USE_USB_HID // Usb_Hid_Adddata(data_to_send,length); //#endif //#ifdef ANO_DT_USE_USART2 // Usart2_Send(data_to_send, length); //#endif //} static void ANO_DT_Send_Check(u8 head, u8 check_sum) { u8 sum = 0,i; data_to_send[0]=0xAA; data_to_send[1]=0xAA; data_to_send[2]=0xEF; data_to_send[3]=2; data_to_send[4]=head; data_to_send[5]=check_sum; for(i=0;i<6;i ) sum = data_to_send[i]; data_to_send[6]=sum; ANO_DT_Send_Data(data_to_send, 7); } ///////////////////////////////////////////////////////////////////////////////////// //Data_Receive_Prepareº¯ÊýÊÇÐÒéÔ¤½âÎö£¬¸ù¾ÝÐÒéµÄ¸ñʽ£¬½«ÊÕµ½µÄÊý¾Ý½øÐÐÒ»´Î¸ñʽÐÔ½âÎö£¬¸ñʽÕýÈ·µÄ»°ÔÙ½øÐÐÊý¾Ý½âÎö //ÒÆÖ²Ê±£¬´Ëº¯ÊýÓ¦ÓÉÓû§¸ù¾Ý×ÔÉíʹÓõÄͨÐÅ·½Ê½×ÔÐе÷Ó㬱ÈÈç´®¿ÚÿÊÕµ½Ò»×Ö½ÚÊý¾Ý£¬Ôòµ÷Óô˺¯ÊýÒ»´Î //´Ëº¯Êý½âÎö³ö·ûºÏ¸ñʽµÄÊý¾ÝÖ¡ºó£¬»á×ÔÐе÷ÓÃÊý¾Ý½âÎöº¯Êý void ANO_DT_Data_Receive_Prepare(u8 data) { static u8 RxBuffer[50]; static u8 _data_len = 0,_data_cnt = 0; static u8 state = 0; if(state==0&&data==0xAA) { state=1; RxBuffer[0]=data; } else if(state==1&&data==0xAF) { state=2; RxBuffer[1]=data; } else if(state==2&&data<0XF1) { state=3; RxBuffer[2]=data; } else if(state==3&&data<50) { state = 4; RxBuffer[3]=data; _data_len = data; _data_cnt = 0; } else if(state==4&&_data_len>0) { _data_len--; RxBuffer[4 _data_cnt ]=data; if(_data_len==0) state = 5; } else if(state==5) { state = 0; RxBuffer[4 _data_cnt]=data; ANO_DT_Data_Receive_Anl(RxBuffer,_data_cnt 5); } else state = 0; } ///////////////////////////////////////////////////////////////////////////////////// //Data_Receive_Anlº¯ÊýÊÇÐÒéÊý¾Ý½âÎöº¯Êý£¬º¯Êý²ÎÊýÊÇ·ûºÏÐÒé¸ñʽµÄÒ»¸öÊý¾ÝÖ¡£¬¸Ãº¯Êý»áÊ×ÏȶÔÐÒéÊý¾Ý½øÐÐУÑé //УÑéͨ¹ýºó¶ÔÊý¾Ý½øÐнâÎö£¬ÊµÏÖÏàÓ¦¹¦ÄÜ //´Ëº¯Êý¿ÉÒÔ²»ÓÃÓû§×ÔÐе÷Óã¬Óɺ¯ÊýData_Receive_Prepare×Ô¶¯µ÷Óà void ANO_DT_Data_Receive_Anl(u8 *data_buf,u8 num) { u8 sum = 0,i; for(i=0;i<(num-1);i ) sum = *(data_buf i); if(!(sum==*(data_buf num-1))) return; //ÅжÏsum if(!(*(data_buf)==0xAA && *(data_buf 1)==0xAF)) return; //ÅжÏÖ¡Í· // if(*(data_buf 2)==0X01) //mpu6050µ÷Áã // { // if(*(data_buf 4)==0X01) // mpu6050.Acc_CALIBRATE = 1; // if(*(data_buf 4)==0X02) // mpu6050.Gyro_CALIBRATE = 1; // if(*(data_buf 4)==0X03) // { // mpu6050.Acc_CALIBRATE = 1; // mpu6050.Gyro_CALIBRATE = 1; // } // } // if(*(data_buf 2)==0X02) //¶ÁÈ¡pid { if(*(data_buf 4)==0X01) { f.send_pid1 = 1; f.send_pid2 = 1; f.send_pid3 = 1; f.send_pid4 = 1; f.send_pid5 = 1; f.send_pid6 = 1; } if(*(data_buf 4)==0X02) { } if(*(data_buf 4)==0XA0) //¶ÁÈ¡°æ±¾ÐÅÏ¢ { f.send_version = 1; } if(*(data_buf 4)==0XA1) //»Ö¸´Ä¬ÈϲÎÊý { //Para_ResetToFactorySetup(); } } if(*(data_buf 2)==0X10) //PID1 { rollkp = 0.001*( (vs16)(*(data_buf 4)<<8)|*(data_buf 5) ); rollki = 0.001*( (vs16)(*(data_buf 6)<<8)|*(data_buf 7) ); rollkd = 0.001*( (vs16)(*(data_buf 8)<<8)|*(data_buf 9) ); pitchkp = 0.001*( (vs16)(*(data_buf 10)<<8)|*(data_buf 11) ); pitchki = 0.001*( (vs16)(*(data_buf 12)<<8)|*(data_buf 13) ); pitchkd = 0.001*( (vs16)(*(data_buf 14)<<8)|*(data_buf 15) ); yawkp = 0.001*( (vs16)(*(data_buf 16)<<8)|*(data_buf 17) ); yawki = 0.001*( (vs16)(*(data_buf 18)<<8)|*(data_buf 19) ); yawkd = 0.001*( (vs16)(*(data_buf 20)<<8)|*(data_buf 21) ); ANO_DT_Send_Check(*(data_buf 2),sum); //Param_SavePID(); } if(*(data_buf 2)==0X11) //PID2 { // ctrl_1.PID[PID4].kp = 0.001*( (vs16)(*(data_buf 4)<<8)|*(data_buf 5) ); // ctrl_1.PID[PID4].ki = 0.001*( (vs16)(*(data_buf 6)<<8)|*(data_buf 7) ); // ctrl_1.PID[PID4].kd = 0.001*( (vs16)(*(data_buf 8)<<8)|*(data_buf 9) ); // ctrl_1.PID[PID5].kp = 0.001*( (vs16)(*(data_buf 10)<<8)|*(data_buf 11) ); // ctrl_1.PID[PID5].ki = 0.001*( (vs16)(*(data_buf 12)<<8)|*(data_buf 13) ); // ctrl_1.PID[PID5].kd = 0.001*( (vs16)(*(data_buf 14)<<8)|*(data_buf 15) ); // ctrl_1.PID[PID6].kp = 0.001*( (vs16)(*(data_buf 16)<<8)|*(data_buf 17) ); // ctrl_1.PID[PID6].ki = 0.001*( (vs16)(*(data_buf 18)<<8)|*(data_buf 19) ); // ctrl_1.PID[PID6].kd = 0.001*( (vs16)(*(data_buf 20)<<8)|*(data_buf 21) ); ANO_DT_Send_Check(*(data_buf 2),sum); //Param_SavePID(); } if(*(data_buf 2)==0X12) //PID3 { // ctrl_2.PID[PIDROLL].kp = 0.001*( (vs16)(*(data_buf 4)<<8)|*(data_buf 5) ); // ctrl_2.PID[PIDROLL].ki = 0.001*( (vs16)(*(data_buf 6)<<8)|*(data_buf 7) ); // ctrl_2.PID[PIDROLL].kd = 0.001*( (vs16)(*(data_buf 8)<<8)|*(data_buf 9) ); // ctrl_2.PID[PIDPITCH].kp = 0.001*( (vs16)(*(data_buf 10)<<8)|*(data_buf 11) ); // ctrl_2.PID[PIDPITCH].ki = 0.001*( (vs16)(*(data_buf 12)<<8)|*(data_buf 13) ); // ctrl_2.PID[PIDPITCH].kd = 0.001*( (vs16)(*(data_buf 14)<<8)|*(data_buf 15) ); // ctrl_2.PID[PIDYAW].kp = 0.001*( (vs16)(*(data_buf 16)<<8)|*(data_buf 17) ); // ctrl_2.PID[PIDYAW].ki = 0.001*( (vs16)(*(data_buf 18)<<8)|*(data_buf 19) ); // ctrl_2.PID[PIDYAW].kd = 0.001*( (vs16)(*(data_buf 20)<<8)|*(data_buf 21) ); ANO_DT_Send_Check(*(data_buf 2),sum); //Param_SavePID(); } if(*(data_buf 2)==0X13) //PID4 { ANO_DT_Send_Check(*(data_buf 2),sum); } if(*(data_buf 2)==0X14) //PID5 { ANO_DT_Send_Check(*(data_buf 2),sum); } if(*(data_buf 2)==0X15) //PID6 { ANO_DT_Send_Check(*(data_buf 2),sum); } } void ANO_DT_Send_Version(u8 hardware_type, u16 hardware_ver,u16 software_ver,u16 protocol_ver,u16 bootloader_ver) { u8 _cnt=0,i,sum = 0; data_to_send[_cnt ]=0xAA; data_to_send[_cnt ]=0xAA; data_to_send[_cnt ]=0x00; data_to_send[_cnt ]=0; data_to_send[_cnt ]=hardware_type; data_to_send[_cnt ]=BYTE1(hardware_ver); data_to_send[_cnt ]=BYTE0(hardware_ver); data_to_send[_cnt ]=BYTE1(software_ver); data_to_send[_cnt ]=BYTE0(software_ver); data_to_send[_cnt ]=BYTE1(protocol_ver); data_to_send[_cnt ]=BYTE0(protocol_ver); data_to_send[_cnt ]=BYTE1(bootloader_ver); data_to_send[_cnt ]=BYTE0(bootloader_ver); data_to_send[3] = _cnt-4; for(i=0;i<_cnt;i ) sum = data_to_send[i]; data_to_send[_cnt ]=sum; ANO_DT_Send_Data(data_to_send, _cnt); } void ANO_DT_Send_Status(float angle_rol, float angle_pit, float angle_yaw, s32 alt, u8 fly_model, u8 armed) { u8 _cnt=0; vs16 _temp; vs32 _temp2 = alt; int i; int sum = 0; 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; // int sum = 0; for(i=0;i<_cnt;i ) sum = data_to_send[i]; data_to_send[_cnt ]=sum; //for(i=0;i<_cnt;i ) usart1_send_char(data_to_send[i]); ANO_DT_Send_Data(data_to_send, _cnt); } void ANO_DT_Send_Senser(s16 a_x,s16 a_y,s16 a_z,s16 g_x,s16 g_y,s16 g_z,s16 m_x,s16 m_y,s16 m_z,s32 bar) { u8 _cnt=0,sum = 0,i; vs16 _temp; data_to_send[_cnt ]=0xAA; data_to_send[_cnt ]=0xAA; data_to_send[_cnt ]=0x02; data_to_send[_cnt ]=0; _temp = a_x; data_to_send[_cnt ]=BYTE1(_temp); data_to_send[_cnt ]=BYTE0(_temp); _temp = a_y; data_to_send[_cnt ]=BYTE1(_temp); data_to_send[_cnt ]=BYTE0(_temp); _temp = a_z; data_to_send[_cnt ]=BYTE1(_temp); data_to_send[_cnt ]=BYTE0(_temp); _temp = g_x; data_to_send[_cnt ]=BYTE1(_temp); data_to_send[_cnt ]=BYTE0(_temp); _temp = g_y; data_to_send[_cnt ]=BYTE1(_temp); data_to_send[_cnt ]=BYTE0(_temp); _temp = g_z; data_to_send[_cnt ]=BYTE1(_temp); data_to_send[_cnt ]=BYTE0(_temp); _temp = m_x; data_to_send[_cnt ]=BYTE1(_temp); data_to_send[_cnt ]=BYTE0(_temp); _temp = m_y; data_to_send[_cnt ]=BYTE1(_temp); data_to_send[_cnt ]=BYTE0(_temp); _temp = m_z; data_to_send[_cnt ]=BYTE1(_temp); data_to_send[_cnt ]=BYTE0(_temp); data_to_send[3] = _cnt-4; for(i=0;i<_cnt;i ) sum = data_to_send[i]; data_to_send[_cnt ] = sum; ANO_DT_Send_Data(data_to_send, _cnt); } void ANO_DT_Send_RCData(u16 thr,u16 yaw,u16 rol,u16 pit,u16 aux1,u16 aux2,u16 aux3,u16 aux4,u16 aux5,u16 aux6) { u8 _cnt=0,i,sum = 0; data_to_send[_cnt ]=0xAA; data_to_send[_cnt ]=0xAA; data_to_send[_cnt ]=0x03; data_to_send[_cnt ]=0; data_to_send[_cnt ]=BYTE1(thr); data_to_send[_cnt ]=BYTE0(thr); data_to_send[_cnt ]=BYTE1(yaw); data_to_send[_cnt ]=BYTE0(yaw); data_to_send[_cnt ]=BYTE1(rol); data_to_send[_cnt ]=BYTE0(rol); data_to_send[_cnt ]=BYTE1(pit); data_to_send[_cnt ]=BYTE0(pit); data_to_send[_cnt ]=BYTE1(aux1); data_to_send[_cnt ]=BYTE0(aux1); data_to_send[_cnt ]=BYTE1(aux2); data_to_send[_cnt ]=BYTE0(aux2); data_to_send[_cnt ]=BYTE1(aux3); data_to_send[_cnt ]=BYTE0(aux3); data_to_send[_cnt ]=BYTE1(aux4); data_to_send[_cnt ]=BYTE0(aux4); data_to_send[_cnt ]=BYTE1(aux5); data_to_send[_cnt ]=BYTE0(aux5); data_to_send[_cnt ]=BYTE1(aux6); data_to_send[_cnt ]=BYTE0(aux6); data_to_send[3] = _cnt-4; for(i=0;i<_cnt;i ) sum = data_to_send[i]; data_to_send[_cnt ]=sum; ANO_DT_Send_Data(data_to_send, _cnt); } void ANO_DT_Send_Power(u16 votage, u16 current) { u8 _cnt=0,i,sum=0; u16 temp; data_to_send[_cnt ]=0xAA; data_to_send[_cnt ]=0xAA; data_to_send[_cnt ]=0x05; data_to_send[_cnt ]=0; temp = votage; data_to_send[_cnt ]=BYTE1(temp); data_to_send[_cnt ]=BYTE0(temp); temp = current; data_to_send[_cnt ]=BYTE1(temp); data_to_send[_cnt ]=BYTE0(temp); data_to_send[3] = _cnt-4; for(i=0;i<_cnt;i ) sum = data_to_send[i]; data_to_send[_cnt ]=sum; ANO_DT_Send_Data(data_to_send, _cnt); } void ANO_DT_Send_MotoPWM(u16 m_1,u16 m_2,u16 m_3,u16 m_4,u16 m_5,u16 m_6,u16 m_7,u16 m_8) { u8 _cnt=0,i,sum = 0; data_to_send[_cnt ]=0xAA; data_to_send[_cnt ]=0xAA; data_to_send[_cnt ]=0x06; data_to_send[_cnt ]=0; data_to_send[_cnt ]=BYTE1(m_1); data_to_send[_cnt ]=BYTE0(m_1); data_to_send[_cnt ]=BYTE1(m_2); data_to_send[_cnt ]=BYTE0(m_2); data_to_send[_cnt ]=BYTE1(m_3); data_to_send[_cnt ]=BYTE0(m_3); data_to_send[_cnt ]=BYTE1(m_4); data_to_send[_cnt ]=BYTE0(m_4); data_to_send[_cnt ]=BYTE1(m_5); data_to_send[_cnt ]=BYTE0(m_5); data_to_send[_cnt ]=BYTE1(m_6); data_to_send[_cnt ]=BYTE0(m_6); data_to_send[_cnt ]=BYTE1(m_7); data_to_send[_cnt ]=BYTE0(m_7); data_to_send[_cnt ]=BYTE1(m_8); data_to_send[_cnt ]=BYTE0(m_8); data_to_send[3] = _cnt-4; for(i=0;i<_cnt;i ) sum = data_to_send[i]; data_to_send[_cnt ]=sum; ANO_DT_Send_Data(data_to_send, _cnt); } void ANO_DT_Send_PID(u8 group,float p1_p,float p1_i,float p1_d,float p2_p,float p2_i,float p2_d,float p3_p,float p3_i,float p3_d) { u8 _cnt=0,i,sum = 0; vs16 _temp; data_to_send[_cnt ]=0xAA; data_to_send[_cnt ]=0xAA; data_to_send[_cnt ]=0x10 group-1; data_to_send[_cnt ]=0; _temp = p1_p ; data_to_send[_cnt ]=BYTE1(_temp); data_to_send[_cnt ]=BYTE0(_temp); _temp = p1_i ; data_to_send[_cnt ]=BYTE1(_temp); data_to_send[_cnt ]=BYTE0(_temp); _temp = p1_d ; data_to_send[_cnt ]=BYTE1(_temp); data_to_send[_cnt ]=BYTE0(_temp); _temp = p2_p ; data_to_send[_cnt ]=BYTE1(_temp); data_to_send[_cnt ]=BYTE0(_temp); _temp = p2_i ; data_to_send[_cnt ]=BYTE1(_temp); data_to_send[_cnt ]=BYTE0(_temp); _temp = p2_d ; data_to_send[_cnt ]=BYTE1(_temp); data_to_send[_cnt ]=BYTE0(_temp); _temp = p3_p ; data_to_send[_cnt ]=BYTE1(_temp); data_to_send[_cnt ]=BYTE0(_temp); _temp = p3_i ; data_to_send[_cnt ]=BYTE1(_temp); data_to_send[_cnt ]=BYTE0(_temp); _temp = p3_d ; data_to_send[_cnt ]=BYTE1(_temp); data_to_send[_cnt ]=BYTE0(_temp); data_to_send[3] = _cnt-4; for(i=0;i<_cnt;i ) sum = data_to_send[i]; data_to_send[_cnt ]=sum; ANO_DT_Send_Data(data_to_send, _cnt); } /******************* (C) COPYRIGHT 2014 ANO TECH *****END OF FILE************/
**********************************************************************************/
//#include "data_transfer.h"
#include "usart.h"
//#include "imu.h"
#include "mpu6050.h"
//#include "ak8975.h"
//#include "ms5611.h"
//#include "rc.h"
//#include "ctrl.h"
#include "time.h"
//#include "usbd_user_hid.h"
#include "ANO_DT.h"
#include "stm32f10x.h"
#include "v2.6.h"
#include "mpu6050.h"
#include "inv_mpu.h"
#include "inv_mpu_dmp_motion_driver.h"
/////////////////////////////////////////////////////////////////////////////////////
//Êý¾Ý²ð·Öºê¶¨Ò壬ÔÚ·¢ËÍ´óÓÚ1×Ö½ÚµÄÊý¾ÝÀàÐÍʱ£¬±ÈÈçint16¡¢floatµÈ£¬ÐèÒª°ÑÊý¾Ý²ð·Ö³Éµ¥¶À×Ö½Ú½øÐз¢ËÍ
#define BYTE0(dwTemp) ( *( (char *)(&dwTemp) ) )
#define BYTE1(dwTemp) ( *( (char *)(&dwTemp) 1) )
#define BYTE2(dwTemp) ( *( (char *)(&dwTemp) 2) )
#define BYTE3(dwTemp) ( *( (char *)(&dwTemp) 3) )
float pit,rol,ya; //Å·À½Ç
u8 pitch,roll,yaw; //Å·À½Ç
u8 aacx,aacy,aacz; //¼ÓËÙ¶È´«¸ÐÆ÷ÔʼÊý¾Ý
u8 gyrox,gyroy,gyroz; //ÍÓÂÝÒÇÔʼÊý¾Ý
short acx,acy,acz; //¼ÓËÙ¶È´«¸ÐÆ÷ÔʼÊý¾Ý
short grox,groy,groz; //ÍÓÂÝÒÇÔʼÊý¾Ý
float rollkp=800,rollki=500,rollkd=30,pitchkp=500,pitchki=200,pitchkd=35,yawkp=700,yawki=30,yawkd=40;
dt_flag_t f; //ÐèÒª·¢ËÍÊý¾ÝµÄ±êÖ¾
u8 data_to_send[50]; //·¢ËÍÊý¾Ý»º´æ
/////////////////////////////////////////////////////////////////////////////////////
void ANO_DT_Send_Data(u8*data_to_send, u8 _cnt)
{ int i;
for(i=0;i<_cnt;i ) usart1_send_char(data_to_send[i]);
}
//Data_Exchangeº¯Êý´¦Àí¸÷ÖÖÊý¾Ý·¢ËÍÇëÇ󣬱ÈÈçÏëʵÏÖÿ5ms·¢ËÍÒ»´Î´«¸ÐÆ÷Êý¾ÝÖÁÉÏλ»ú£¬¼´Ôڴ˺¯ÊýÄÚʵÏÖ
//´Ëº¯ÊýÓ¦ÓÉÓû§Ã¿1msµ÷ÓÃÒ»´Î
void ANO_DT_Data_Exchange(void)
{
static u8 cnt = 0;
static u8 senser_cnt = 10;
static u8 status_cnt = 15;
static u8 rcdata_cnt = 20;
static u8 motopwm_cnt = 20;
static u8 power_cnt = 50;
MPU_Get_Accelerometer(&acx,&acy,&acz); //µÃµ½¼ÓËÙ¶È´«¸ÐÆ÷Êý¾Ý
MPU_Get_Gyroscope(&grox,&groy,&groz); //µÃµ½ÍÓÂÝÒÇÊý¾Ý
mpu_dmp_get_data(&pit,&rol,&ya);
if((cnt % senser_cnt) == (senser_cnt-1))
f.send_senser = 1;
if((cnt % status_cnt) == (status_cnt-1))
f.send_status = 1;
if((cnt % rcdata_cnt) == (rcdata_cnt-1))
f.send_rcdata = 1;
if((cnt % motopwm_cnt) == (motopwm_cnt-1))
f.send_motopwm = 1;
if((cnt % power_cnt) == (power_cnt-1))
f.send_power = 1;
cnt ;
/////////////////////////////////////////////////////////////////////////////////////
if(f.send_version) //°æ±¾ÐÅÏ¢
{
f.send_version = 0;
ANO_DT_Send_Version(4,300,100,400,0);
}
/////////////////////////////////////////////////////////////////////////////////////
else if(f.send_status) //pit roll yaw ¸ß¶È ·ÉÐÐģʽ 0½âËø 1¼ÓËø
{
f.send_status = 0;
roll=rol;
pitch=pit;
yaw=ya;
ANO_DT_Send_Status(rol,pit,ya,500,1,1);//¸ßµÄcm
}
/////////////////////////////////////////////////////////////////////////////////////
else if(f.send_senser)
{
f.send_senser = 0;
aacx=acx;
aacy=acy;
aacz=acz;
gyrox=grox;
gyroy=groy;
gyroz=groz;
ANO_DT_Send_Senser(aacx,aacy,aacz,
gyrox,gyroy,gyroz,
0,0,0,0);
}
/////////////////////////////////////////////////////////////////////////////////////
// else if(f.send_rcdata)
// {
// f.send_rcdata = 0;
// ANO_DT_Send_RCData(Rc_Pwm_In[0],Rc_Pwm_In[1],Rc_Pwm_In[2],Rc_Pwm_In[3],Rc_Pwm_In[4],Rc_Pwm_In[5],Rc_Pwm_In[6],Rc_Pwm_In[7],0,0);
// }
/////////////////////////////////////////////////////////////////////////////////////
else if(f.send_motopwm)
{
f.send_motopwm = 0;
ANO_DT_Send_MotoPWM(900,2,5,10000,8,6,6,8);
}
/////////////////////////////////////////////////////////////////////////////////////
else if(f.send_power)
{
f.send_power = 0;
ANO_DT_Send_Power(234,456); //µçѹ µçÁ÷
}
/////////////////////////////////////////////////////////////////////////////////////
else if(f.send_pid1)
{
f.send_pid1 = 0;
ANO_DT_Send_PID(1,rollkp,rollki,rollkd,pitchkp,pitchki,pitchkd,yawkp,yawki,yawkd);
}
/////////////////////////////////////////////////////////////////////////////////////
else if(f.send_pid2)
{
f.send_pid2 = 0;
//ANO_DT_Send_PID(2,p1_p,p1_i,p1_d,p2_p,p2_i,p2_d,p3_p,p3_i,p3_d);
}
/////////////////////////////////////////////////////////////////////////////////////
else if(f.send_pid3)
{
f.send_pid3 = 0;
//ANO_DT_Send_PID(3,p1_p,p1_i,p1_d,p2_p,p2_i,p2_d,p3_p,p3_i,p3_d);
}
///////////////////////////////////////////////////////////////////////////////////////
}
///////////////////////////////////////////////////////////////////////////////////////
////Send_Dataº¯ÊýÊÇÐÒéÖÐËùÓз¢ËÍÊý¾Ý¹¦ÄÜʹÓõ½µÄ·¢Ëͺ¯Êý
////ÒÆÖ²Ê±£¬Óû§Ó¦¸ù¾Ý×ÔÉíÓ¦ÓõÄÇé¿ö£¬¸ù¾ÝʹÓõÄͨÐÅ·½Ê½£¬ÊµÏִ˺¯Êý
//void ANO_DT_Send_Data(u8 *dataToSend , u8 length)
//{
//#ifdef ANO_DT_USE_USB_HID
// Usb_Hid_Adddata(data_to_send,length);
//#endif
//#ifdef ANO_DT_USE_USART2
// Usart2_Send(data_to_send, length);
//#endif
//}
static void ANO_DT_Send_Check(u8 head, u8 check_sum)
{ u8 sum = 0,i;
data_to_send[0]=0xAA;
data_to_send[1]=0xAA;
data_to_send[2]=0xEF;
data_to_send[3]=2;
data_to_send[4]=head;
data_to_send[5]=check_sum;
for(i=0;i<6;i )
sum = data_to_send[i];
data_to_send[6]=sum;
ANO_DT_Send_Data(data_to_send, 7);
}
/////////////////////////////////////////////////////////////////////////////////////
//Data_Receive_Prepareº¯ÊýÊÇÐÒéÔ¤½âÎö£¬¸ù¾ÝÐÒéµÄ¸ñʽ£¬½«ÊÕµ½µÄÊý¾Ý½øÐÐÒ»´Î¸ñʽÐÔ½âÎö£¬¸ñʽÕýÈ·µÄ»°ÔÙ½øÐÐÊý¾Ý½âÎö
//ÒÆÖ²Ê±£¬´Ëº¯ÊýÓ¦ÓÉÓû§¸ù¾Ý×ÔÉíʹÓõÄͨÐÅ·½Ê½×ÔÐе÷Ó㬱ÈÈç´®¿ÚÿÊÕµ½Ò»×Ö½ÚÊý¾Ý£¬Ôòµ÷Óô˺¯ÊýÒ»´Î
//´Ëº¯Êý½âÎö³ö·ûºÏ¸ñʽµÄÊý¾ÝÖ¡ºó£¬»á×ÔÐе÷ÓÃÊý¾Ý½âÎöº¯Êý
void ANO_DT_Data_Receive_Prepare(u8 data)
{
static u8 RxBuffer[50];
static u8 _data_len = 0,_data_cnt = 0;
static u8 state = 0;
if(state==0&&data==0xAA)
{
state=1;
RxBuffer[0]=data;
}
else if(state==1&&data==0xAF)
{
state=2;
RxBuffer[1]=data;
}
else if(state==2&&data<0XF1)
{
state=3;
RxBuffer[2]=data;
}
else if(state==3&&data<50)
{
state = 4;
RxBuffer[3]=data;
_data_len = data;
_data_cnt = 0;
}
else if(state==4&&_data_len>0)
{
_data_len--;
RxBuffer[4 _data_cnt ]=data;
if(_data_len==0)
state = 5;
}
else if(state==5)
{
state = 0;
RxBuffer[4 _data_cnt]=data;
ANO_DT_Data_Receive_Anl(RxBuffer,_data_cnt 5);
}
else
state = 0;
}
/////////////////////////////////////////////////////////////////////////////////////
//Data_Receive_Anlº¯ÊýÊÇÐÒéÊý¾Ý½âÎöº¯Êý£¬º¯Êý²ÎÊýÊÇ·ûºÏÐÒé¸ñʽµÄÒ»¸öÊý¾ÝÖ¡£¬¸Ãº¯Êý»áÊ×ÏȶÔÐÒéÊý¾Ý½øÐÐУÑé
//УÑéͨ¹ýºó¶ÔÊý¾Ý½øÐнâÎö£¬ÊµÏÖÏàÓ¦¹¦ÄÜ
//´Ëº¯Êý¿ÉÒÔ²»ÓÃÓû§×ÔÐе÷Óã¬Óɺ¯ÊýData_Receive_Prepare×Ô¶¯µ÷ÓÃ
void ANO_DT_Data_Receive_Anl(u8 *data_buf,u8 num)
{
u8 sum = 0,i;
for(i=0;i<(num-1);i )
sum = *(data_buf i);
if(!(sum==*(data_buf num-1))) return; //ÅжÏsum
if(!(*(data_buf)==0xAA && *(data_buf 1)==0xAF)) return; //ÅжÏÖ¡Í·
// if(*(data_buf 2)==0X01) //mpu6050µ÷Áã
// {
// if(*(data_buf 4)==0X01)
// mpu6050.Acc_CALIBRATE = 1;
// if(*(data_buf 4)==0X02)
// mpu6050.Gyro_CALIBRATE = 1;
// if(*(data_buf 4)==0X03)
// {
// mpu6050.Acc_CALIBRATE = 1;
// mpu6050.Gyro_CALIBRATE = 1;
// }
// }
//
if(*(data_buf 2)==0X02) //¶ÁÈ¡pid
{
if(*(data_buf 4)==0X01)
{
f.send_pid1 = 1;
f.send_pid2 = 1;
f.send_pid3 = 1;
f.send_pid4 = 1;
f.send_pid5 = 1;
f.send_pid6 = 1;
}
if(*(data_buf 4)==0X02)
{
}
if(*(data_buf 4)==0XA0) //¶ÁÈ¡°æ±¾ÐÅÏ¢
{
f.send_version = 1;
}
if(*(data_buf 4)==0XA1) //»Ö¸´Ä¬ÈϲÎÊý
{
//Para_ResetToFactorySetup();
}
}
if(*(data_buf 2)==0X10) //PID1
{
rollkp = 0.001*( (vs16)(*(data_buf 4)<<8)|*(data_buf 5) );
rollki = 0.001*( (vs16)(*(data_buf 6)<<8)|*(data_buf 7) );
rollkd = 0.001*( (vs16)(*(data_buf 8)<<8)|*(data_buf 9) );
pitchkp = 0.001*( (vs16)(*(data_buf 10)<<8)|*(data_buf 11) );
pitchki = 0.001*( (vs16)(*(data_buf 12)<<8)|*(data_buf 13) );
pitchkd = 0.001*( (vs16)(*(data_buf 14)<<8)|*(data_buf 15) );
yawkp = 0.001*( (vs16)(*(data_buf 16)<<8)|*(data_buf 17) );
yawki = 0.001*( (vs16)(*(data_buf 18)<<8)|*(data_buf 19) );
yawkd = 0.001*( (vs16)(*(data_buf 20)<<8)|*(data_buf 21) );
ANO_DT_Send_Check(*(data_buf 2),sum);
//Param_SavePID();
}
if(*(data_buf 2)==0X11) //PID2
{
// ctrl_1.PID[PID4].kp = 0.001*( (vs16)(*(data_buf 4)<<8)|*(data_buf 5) );
// ctrl_1.PID[PID4].ki = 0.001*( (vs16)(*(data_buf 6)<<8)|*(data_buf 7) );
// ctrl_1.PID[PID4].kd = 0.001*( (vs16)(*(data_buf 8)<<8)|*(data_buf 9) );
// ctrl_1.PID[PID5].kp = 0.001*( (vs16)(*(data_buf 10)<<8)|*(data_buf 11) );
// ctrl_1.PID[PID5].ki = 0.001*( (vs16)(*(data_buf 12)<<8)|*(data_buf 13) );
// ctrl_1.PID[PID5].kd = 0.001*( (vs16)(*(data_buf 14)<<8)|*(data_buf 15) );
// ctrl_1.PID[PID6].kp = 0.001*( (vs16)(*(data_buf 16)<<8)|*(data_buf 17) );
// ctrl_1.PID[PID6].ki = 0.001*( (vs16)(*(data_buf 18)<<8)|*(data_buf 19) );
// ctrl_1.PID[PID6].kd = 0.001*( (vs16)(*(data_buf 20)<<8)|*(data_buf 21) );
ANO_DT_Send_Check(*(data_buf 2),sum);
//Param_SavePID();
}
if(*(data_buf 2)==0X12) //PID3
{
// ctrl_2.PID[PIDROLL].kp = 0.001*( (vs16)(*(data_buf 4)<<8)|*(data_buf 5) );
// ctrl_2.PID[PIDROLL].ki = 0.001*( (vs16)(*(data_buf 6)<<8)|*(data_buf 7) );
// ctrl_2.PID[PIDROLL].kd = 0.001*( (vs16)(*(data_buf 8)<<8)|*(data_buf 9) );
// ctrl_2.PID[PIDPITCH].kp = 0.001*( (vs16)(*(data_buf 10)<<8)|*(data_buf 11) );
// ctrl_2.PID[PIDPITCH].ki = 0.001*( (vs16)(*(data_buf 12)<<8)|*(data_buf 13) );
// ctrl_2.PID[PIDPITCH].kd = 0.001*( (vs16)(*(data_buf 14)<<8)|*(data_buf 15) );
// ctrl_2.PID[PIDYAW].kp = 0.001*( (vs16)(*(data_buf 16)<<8)|*(data_buf 17) );
// ctrl_2.PID[PIDYAW].ki = 0.001*( (vs16)(*(data_buf 18)<<8)|*(data_buf 19) );
// ctrl_2.PID[PIDYAW].kd = 0.001*( (vs16)(*(data_buf 20)<<8)|*(data_buf 21) );
ANO_DT_Send_Check(*(data_buf 2),sum);
//Param_SavePID();
}
if(*(data_buf 2)==0X13) //PID4
{
ANO_DT_Send_Check(*(data_buf 2),sum);
}
if(*(data_buf 2)==0X14) //PID5
{
ANO_DT_Send_Check(*(data_buf 2),sum);
}
if(*(data_buf 2)==0X15) //PID6
{
ANO_DT_Send_Check(*(data_buf 2),sum);
}
}
void ANO_DT_Send_Version(u8 hardware_type, u16 hardware_ver,u16 software_ver,u16 protocol_ver,u16 bootloader_ver)
{
u8 _cnt=0,i,sum = 0;
data_to_send[_cnt ]=0xAA;
data_to_send[_cnt ]=0xAA;
data_to_send[_cnt ]=0x00;
data_to_send[_cnt ]=0;
data_to_send[_cnt ]=hardware_type;
data_to_send[_cnt ]=BYTE1(hardware_ver);
data_to_send[_cnt ]=BYTE0(hardware_ver);
data_to_send[_cnt ]=BYTE1(software_ver);
data_to_send[_cnt ]=BYTE0(software_ver);
data_to_send[_cnt ]=BYTE1(protocol_ver);
data_to_send[_cnt ]=BYTE0(protocol_ver);
data_to_send[_cnt ]=BYTE1(bootloader_ver);
data_to_send[_cnt ]=BYTE0(bootloader_ver);
data_to_send[3] = _cnt-4;
for(i=0;i<_cnt;i )
sum = data_to_send[i];
data_to_send[_cnt ]=sum;
ANO_DT_Send_Data(data_to_send, _cnt);
}
void ANO_DT_Send_Status(float angle_rol, float angle_pit, float angle_yaw, s32 alt, u8 fly_model, u8 armed)
{
u8 _cnt=0;
vs16 _temp;
vs32 _temp2 = alt;
int i;
int sum = 0;
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;
// int sum = 0;
for(i=0;i<_cnt;i )
sum = data_to_send[i];
data_to_send[_cnt ]=sum;
//for(i=0;i<_cnt;i ) usart1_send_char(data_to_send[i]);
ANO_DT_Send_Data(data_to_send, _cnt);
}
void ANO_DT_Send_Senser(s16 a_x,s16 a_y,s16 a_z,s16 g_x,s16 g_y,s16 g_z,s16 m_x,s16 m_y,s16 m_z,s32 bar)
{
u8 _cnt=0,sum = 0,i;
vs16 _temp;
data_to_send[_cnt ]=0xAA;
data_to_send[_cnt ]=0xAA;
data_to_send[_cnt ]=0x02;
data_to_send[_cnt ]=0;
_temp = a_x;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = a_y;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = a_z;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = g_x;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = g_y;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = g_z;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = m_x;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = m_y;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = m_z;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
data_to_send[3] = _cnt-4;
for(i=0;i<_cnt;i )
sum = data_to_send[i];
data_to_send[_cnt ] = sum;
ANO_DT_Send_Data(data_to_send, _cnt);
}
void ANO_DT_Send_RCData(u16 thr,u16 yaw,u16 rol,u16 pit,u16 aux1,u16 aux2,u16 aux3,u16 aux4,u16 aux5,u16 aux6)
{
u8 _cnt=0,i,sum = 0;
data_to_send[_cnt ]=0xAA;
data_to_send[_cnt ]=0xAA;
data_to_send[_cnt ]=0x03;
data_to_send[_cnt ]=0;
data_to_send[_cnt ]=BYTE1(thr);
data_to_send[_cnt ]=BYTE0(thr);
data_to_send[_cnt ]=BYTE1(yaw);
data_to_send[_cnt ]=BYTE0(yaw);
data_to_send[_cnt ]=BYTE1(rol);
data_to_send[_cnt ]=BYTE0(rol);
data_to_send[_cnt ]=BYTE1(pit);
data_to_send[_cnt ]=BYTE0(pit);
data_to_send[_cnt ]=BYTE1(aux1);
data_to_send[_cnt ]=BYTE0(aux1);
data_to_send[_cnt ]=BYTE1(aux2);
data_to_send[_cnt ]=BYTE0(aux2);
data_to_send[_cnt ]=BYTE1(aux3);
data_to_send[_cnt ]=BYTE0(aux3);
data_to_send[_cnt ]=BYTE1(aux4);
data_to_send[_cnt ]=BYTE0(aux4);
data_to_send[_cnt ]=BYTE1(aux5);
data_to_send[_cnt ]=BYTE0(aux5);
data_to_send[_cnt ]=BYTE1(aux6);
data_to_send[_cnt ]=BYTE0(aux6);
data_to_send[3] = _cnt-4;
for(i=0;i<_cnt;i )
sum = data_to_send[i];
data_to_send[_cnt ]=sum;
ANO_DT_Send_Data(data_to_send, _cnt);
}
void ANO_DT_Send_Power(u16 votage, u16 current)
{
u8 _cnt=0,i,sum=0;
u16 temp;
data_to_send[_cnt ]=0xAA;
data_to_send[_cnt ]=0xAA;
data_to_send[_cnt ]=0x05;
data_to_send[_cnt ]=0;
temp = votage;
data_to_send[_cnt ]=BYTE1(temp);
data_to_send[_cnt ]=BYTE0(temp);
temp = current;
data_to_send[_cnt ]=BYTE1(temp);
data_to_send[_cnt ]=BYTE0(temp);
data_to_send[3] = _cnt-4;
for(i=0;i<_cnt;i )
sum = data_to_send[i];
data_to_send[_cnt ]=sum;
ANO_DT_Send_Data(data_to_send, _cnt);
}
void ANO_DT_Send_MotoPWM(u16 m_1,u16 m_2,u16 m_3,u16 m_4,u16 m_5,u16 m_6,u16 m_7,u16 m_8)
{
u8 _cnt=0,i,sum = 0;
data_to_send[_cnt ]=0xAA;
data_to_send[_cnt ]=0xAA;
data_to_send[_cnt ]=0x06;
data_to_send[_cnt ]=0;
data_to_send[_cnt ]=BYTE1(m_1);
data_to_send[_cnt ]=BYTE0(m_1);
data_to_send[_cnt ]=BYTE1(m_2);
data_to_send[_cnt ]=BYTE0(m_2);
data_to_send[_cnt ]=BYTE1(m_3);
data_to_send[_cnt ]=BYTE0(m_3);
data_to_send[_cnt ]=BYTE1(m_4);
data_to_send[_cnt ]=BYTE0(m_4);
data_to_send[_cnt ]=BYTE1(m_5);
data_to_send[_cnt ]=BYTE0(m_5);
data_to_send[_cnt ]=BYTE1(m_6);
data_to_send[_cnt ]=BYTE0(m_6);
data_to_send[_cnt ]=BYTE1(m_7);
data_to_send[_cnt ]=BYTE0(m_7);
data_to_send[_cnt ]=BYTE1(m_8);
data_to_send[_cnt ]=BYTE0(m_8);
data_to_send[3] = _cnt-4;
for(i=0;i<_cnt;i )
sum = data_to_send[i];
data_to_send[_cnt ]=sum;
ANO_DT_Send_Data(data_to_send, _cnt);
}
void ANO_DT_Send_PID(u8 group,float p1_p,float p1_i,float p1_d,float p2_p,float p2_i,float p2_d,float p3_p,float p3_i,float p3_d)
{
u8 _cnt=0,i,sum = 0;
vs16 _temp;
data_to_send[_cnt ]=0xAA;
data_to_send[_cnt ]=0xAA;
data_to_send[_cnt ]=0x10 group-1;
data_to_send[_cnt ]=0;
_temp = p1_p ;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = p1_i ;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = p1_d ;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = p2_p ;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = p2_i ;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = p2_d ;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = p3_p ;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = p3_i ;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
_temp = p3_d ;
data_to_send[_cnt ]=BYTE1(_temp);
data_to_send[_cnt ]=BYTE0(_temp);
data_to_send[3] = _cnt-4;
for(i=0;i<_cnt;i )
sum = data_to_send[i];
data_to_send[_cnt ]=sum;
ANO_DT_Send_Data(data_to_send, _cnt);
}
/******************* (C) COPYRIGHT 2014 ANO TECH *****END OF FILE************/
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论