初级会员
- 积分
- 105
- 金钱
- 105
- 注册时间
- 2018-4-6
- 在线时间
- 25 小时
|
3金钱
本帖最后由 会飞的萨摩 于 2018-5-24 23:48 编辑
有哪位大佬写过匿名上位机的读pid或写pid吗,按我的理解是上位机从下位机读取pid数据,我按协议改了关键字什么的,并且放在while(1)里
让他一直发送pid数据给上位机,可是我点那个读pid没有显示,下面是我改的程序,还有匿名接收的数据,有哪位大佬帮帮忙看看我哪里搞错了吗?
新人一个 还很多不懂.......
在主函数,我简单的发了个1,2,3,4,5,6,7,8,9,看能不能读到
协议:
5:上位机发送读PID数据的命令为:0X8A 0X8B 0X1C 0XAD + 无用数据 + SUM
6:下位机发送offset数据给上位机的格式为:0X88 0XAC 0X1C 0XAC + 传感器零偏数据ACC XYZ GYRO XYZ
+无用数据+SUM,共六个int16型数据。
7:下位机发送PID数据给上位机的格式为:0X88 0XAC 0X1C 0XAD + PID数据 + 无用数据 + SUM
PID数据为rol_p,rol_i,rol_d,pit_p..i..d,yaw_p,,i,,d,共9个uint16型数据。
8:上位机发送PID数据给下位机的格式为:0X8A 0X8B 0X1C 0XAE +PID数据+ 无用数据 + SUM
PID数据格式和下位机发送给上位机的格式一样。
下面是我改的程序
void usart1_niming_PID_report(u8 fun,u8*data,u8 len)
{
u8 send_buf[32];
u8 i;
if(len>28)return; //×î¶à28×Ö½úêy¾Y
send_buf[len+4]=0; //D£ÑéêyÖÃáã
send_buf[0]=0X88; //Ö¡í·
send_buf[1]=fun; //1|Äü×Ö
send_buf[2]=len; //êy¾Y3¤¶è
send_buf[3]=0xAD; //
for(i=0;i<len;i++)send_buf[4+i]=data; //¸′ÖÆêy¾Y
for(i=0;i<len+4;i++)send_buf[len+4]+=send_buf; //¼ÆËãD£Ñéoí
for(i=0;i<len+5;i++)usart1_send_char(send_buf); //·¢Ëíêy¾Yμ½′®¿ú1
}
void usart1_report_PID(short rol_p,short rol_i,short rol_d,short pit_p,short pit_i,short pit_d,short yaw_p,short yaw_i,short yaw_d)
{
u8 tbuf[28];
u8 i;
for(i=0;i<28;i++)tbuf=0;//Çå0
tbuf[0]=(rol_p>>8)&0XFF;
tbuf[1]=rol_p&0XFF;
tbuf[2]=(rol_i>>8)&0XFF;
tbuf[3]=rol_i&0XFF;
tbuf[4]=(rol_d>>8)&0XFF;
tbuf[5]=rol_d&0XFF;
tbuf[6]=(pit_p>>8)&0XFF;
tbuf[7]=pit_p&0XFF;
tbuf[8]=(pit_i>>8)&0XFF;
tbuf[9]=pit_i&0XFF;
tbuf[10]=(pit_d>>8)&0XFF;
tbuf[11]=pit_d&0XFF;
tbuf[12]=(yaw_p>>8)&0XFF;
tbuf[13]=yaw_p&0XFF;
tbuf[14]=(yaw_i>>8)&0XFF;
tbuf[15]=yaw_i&0XFF;
tbuf[16]=(yaw_d>>8)&0XFF;
tbuf[17]=yaw_d&0XFF;
usart1_niming_PID_report(0XAC,tbuf,28);//·¢Ëípid 0xac
}
|
-
匿名接收到的数据
-
就是想实现这个按钮的功能
|