百花楼论坛全国_一品楼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将一直关注*实用的编程技术,以飨网友。


    主站蜘蛛池模板: 资源县| 钟山县| 宁明县| 辛集市| 汝南县| 吉隆县| 金山区| 外汇| 乐山市| 铁岭市| 昌乐县| 万源市| 丰顺县| 开封市| 萝北县| 昭觉县| 阳泉市| 柳江县| 闻喜县| 平顶山市| 二手房| 托克托县| 哈尔滨市| 习水县| 三台县| 塔城市| 荔浦县| 姚安县| 仁化县| 岳池县| 定襄县| 正宁县| 五台县| 衡南县| 常熟市| 巴彦县| 东港市| 徐州市| 乐平市| 盘锦市| 梨树县|