人机交互
蓝牙协议
匿名上位机
//匿名上位机协议
void usart_niming_report(uint8 fun,uint8*data,uint8 len)
{
uint8 send_buf[32];
uint8 i;
if(len>28)return; //最多28字节数据
send_buf[len+3]=0; //校验数置零
send_buf[0]=0XAA; //帧头
send_buf[1]=0XAA; //帧头
send_buf[2]=fun; //功能字
send_buf[3]=len; //数据长度
for(i=0;i<len;i++)send_buf[4+i]=data[i]; //复制数据
for(i=0;i<len+4;i++)send_buf[len+4]+=send_buf[i]; //计算校验和
for(i=0;i<len+5;i++)uart_putchar(USART_2,send_buf[i]); //发送数据到串口2(蓝牙)
}
void ANO_DT_Send_date(short aacx,short aacy,short aacz,short gyrox,short gyroy,short gyroz,short magox,short magoy,short magoz)
{
uint8 tbuf[19];
tbuf[0]=(aacx>>8)&0XFF;
tbuf[1]=aacx&0XFF;
tbuf[2]=(aacy>>8)&0XFF;
tbuf[3]=aacy&0XFF;
tbuf[4]=(aacz>>8)&0XFF;
tbuf[5]=aacz&0XFF;
tbuf[6]=(gyrox>>8)&0XFF;
tbuf[7]=gyrox&0XFF;
tbuf[8]=(gyroy>>8)&0XFF;
tbuf[9]=gyroy&0XFF;
tbuf[10]=(gyroz>>8)&0XFF;
tbuf[11]=gyroz&0XFF;
tbuf[12]=(magox>>8)&0XFF;
tbuf[13]=magox&0XFF;
tbuf[14]=(magoy>>8)&0XFF;
tbuf[15]=magoy&0XFF;
tbuf[16]=(magoz>>8)&0XFF;
tbuf[17]=magoz&0XFF;
tbuf[18]=0;//不能删
usart_niming_report(0X02,tbuf,18);//传感器帧,0X02
}
只要实现了串口发送一个字节的功能,即可使用该协议同时查看9个变量的波形曲线。
蓝牙调试协议
uint16 getstr,data_p;
uint8 uart_dat,uart_stop=0;
char comdata[90];
void uartProcess()
{
if(uart_query(USART_2,&uart_dat)==1)
{
uart_putchar(USART_2,uart_dat);
getstr=uart_dat; //读取串口值保存在getstr里
if(getstr == '\n')
{
comdata[data_p] = getstr;
data_p = 0;
if((char)comdata[0] == '0'&&(char)comdata[2] == '0')
{
switch((char)comdata[1])
{
case'1':Kp3=Kp3+0.1f;break;
case'2':Kp3=Kp3-0.1f;break;
case'3':Kd3=Kd3+1;break;
case'4':Kd3=Kd3-1;break;
case'5':Dynamic_P=Dynamic_P+1;break;
case'6':Dynamic_P=Dynamic_P-1;break;
case'7':Across=Across+0.1;break;
case'8':Across=Across-0.1;break;
case'9':bluth=! bluth;break;
case'A':Vertical=Vertical+0.1;break;
case'B':Vertical=Vertical-0.1;break;
}
}
}
else
{
comdata[data_p] = getstr ;
data_p++ ;
}
}
}
该协议需要查询串口是否接收到了新的内容,并在内部处理内容和执行相应的逻辑。