人机交互

蓝牙协议

匿名上位机

//匿名上位机协议
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++ ;
        }
    }
}

该协议需要查询串口是否接收到了新的内容,并在内部处理内容和执行相应的逻辑。

最后修改:2022 年 03 月 02 日
如果觉得我的文章对你有用,请随意赞赏