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


    主站蜘蛛池模板: 瑞昌市| 清水河县| 麟游县| 嵊州市| 霞浦县| 肥东县| 区。| 怀安县| 天长市| 黑山县| 嘉峪关市| 延庆县| 平潭县| 阿拉善左旗| 永年县| 新津县| 宁国市| 太谷县| 嘉兴市| 丘北县| 靖江市| 县级市| 根河市| 金溪县| 调兵山市| 康平县| 兴城市| 隆化县| 株洲市| 克东县| 沁阳市| 万荣县| 祁门县| 凤城市| 乐山市| 静海县| 万州区| 逊克县| 大邑县| 集贤县| 阳西县|