百花楼论坛全国_一品楼QM论坛_泻火吧论坛重庆

  • 您的位置:首页 > 新闻动态 > 技术文章

    串口通信的MPU姿态传感器数据包解析技术

    2018/1/19??????点击:

    本程序段描述了MPUXXX姿态传感器通过串口发送给主机时的数据包解析过程,仅供参考。

    void Analysize_Data()
            {

               float CurrentTimeCounter = 0;

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

                    while (buffer.Count >= 5)//至少要包含头(2字节) +功能字(1字节) +长度(1字节) +校验(1字节)
                    {
                        //1 查找数据头  
                        if (buffer[0] == 0x55 && buffer[1] == 0xaa)//检测是否是包头
                        {
                            int len = buffer[3];//数据长度  
                            //数据不够时移除数据
                            if (buffer.Count < len + 5)
                            {
                                buffer.RemoveRange(0, buffer.Count - 1);
                                break;
                            }
                            if (buffer[3] == 0x06) //该帧长度16字节//数据位没有0x06位
                            {
                                Ctrl_Roll = (float)(((short)((buffer[4] << 8) | buffer[5])) / 100.0);//解析协议的,提取数据并将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);//正确分析一条数据,从缓存中移除数据。数据移除 
                                if (data_1_catched)
                                {
                                    //更新界面  
                                    this.Invoke((EventHandler)(delegate//对监控的数据的实时曲线进行跟新
                                    {
                                        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
                        {      //这里是很重要的,如果数据开始不是头,则删除数据  
                            buffer.RemoveAt(0);
                        }
                    }
                }

            }


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


    主站蜘蛛池模板: 泽州县| 延庆县| 和平县| 赞皇县| 嵩明县| 利川市| 惠州市| 罗源县| 乌什县| 凤山市| 平凉市| 徐州市| 商城县| 来安县| 永嘉县| 武安市| 筠连县| 茌平县| 安达市| 阜城县| 陵川县| 炎陵县| 繁峙县| 贵州省| 大余县| 南汇区| 含山县| 峨边| 宿松县| 依安县| 沭阳县| 商都县| 新津县| 长丰县| 哈密市| 桃园市| 木兰县| 南开区| 邮箱| 寿阳县| 沾益县|