• 串口通(tōng)信的MPU姿态传感器数据包解析技(jì)术

    2018/1/19      点击:

    本(běn)程序段描述了MPUXXX姿态传感器通(tōng)过串口发送给(gěi)主机时的数据包解析过程,仅供参(cān)考。

    void Analysize_Data()
            {

               float CurrentTimeCounter = 0;

                while (true)
                {
                    bool data_1_catched = false;//缓存记录数据是否捕(bǔ)获到  
                    //int  CurrentTimeCounter = 0;
                    int buffer_len = buffer.Count;//获取buffer长度

                    while (buffer.Count >= 5)//至少(shǎo)要(yào)包含头(2字节) +功能(néng)字(1字(zì)节) +长度(1字(zì)节) +校验(1字节)
                    {
                        //1 查(chá)找数据头  
                        if (buffer[0] == 0x55 && buffer[1] == 0xaa)//检测是否是包头
                        {
                            int len = buffer[3];//数(shù)据长度  
                            //数据不够时移除数据
                            if (buffer.Count < len + 5)
                            {
                                buffer.RemoveRange(0, buffer.Count - 1);
                                break;
                            }
                            if (buffer[3] == 0x06) //该帧长度16字节//数据位没(méi)有0x06位
                            {
                                Ctrl_Roll = (float)(((short)((buffer[4] << 8) | buffer[5])) / 100.0);//解析协议的,提取(qǔ)数据并将16进制转换为10进制,
                                Ctrl_Pitch = (float)(((short)((buffer[6] << 8) | buffer[7])) / 100.0);
                                Ctrl_Yaw = (float)(((short)((buffer[8] << 8) | buffer[9])) / 10.0);
                                data_1_catched = true;
                                buffer.RemoveRange(0, len + 4);//正确分析一条数据,从缓存中移除(chú)数据。数据移除 
                                if (data_1_catched)
                                {
                                    //更新界面  
                                    this.Invoke((EventHandler)(delegate//对监控的数据的实时(shí)曲线(xiàn)进行跟新
                                    {
                                        chart1.Series[0].Points.AddXY(CurrentTimeCounter, Ctrl_Roll);
                                        chart1.Series[1].Points.AddXY(CurrentTimeCounter, Ctrl_Pitch);
                                        chart1.Series[2].Points.AddXY(CurrentTimeCounter, Ctrl_Yaw);                                                                                                                                          
                                    }));
                                }
                            }
                            else
                            {
                                buffer.RemoveAt(0);
                                break;
                            }
                        }
                        else
                        {      //这里是很重要的,如果数据(jù)开(kāi)始不是(shì)头(tóu),则删除数据(jù)  
                            buffer.RemoveAt(0);
                        }
                    }
                }

            }


        WONGLOVE将一直关注*实用的编程技术,以飨(xiǎng)网友。


    日本中出视频|午夜免费福利在线|亚洲精品亚洲人成在线下载|国产高潮流白浆免费观看不卡|偷拍亚洲欧美|亚洲中文字幕久爱亚洲伊人|久久久久香蕉视频|国产欧美日韩一区|久久国产成人亚洲精品影院老金|久久久久中文字幕