C#上位机

今天分配的任务是做出上位机接收单片机发送的四元数,里程数,角度值数据,协议都已经给出,采用串口通信。

a) 波特率:115200

b) 数据位:8

c)  校验位:None

d) 停止位:1

接收数据:  int len = serialPort1.BytesToRead;
                      byte[] data = new byte[len];
                      serialPort1.Read(data, 0, len);

            23是协议中一个包的长,根据实际需要进行更改

             for (int i = 0; i < len; i += 23)
            {
                byte[] newByte = ByteConvertToFloat.SubByte(data, i, 23);//下面定义的一个截取定长字节数组的方法
                if (newByte[0] == 0x24)//帧头
                {
                    if (newByte[1] == 0x02)//Paket_Quat
                    {
                        if (newByte[2] == 0x00)//四元数标志位
                        {
                                 //对收到的数据进行处理的代码,字节转整型浮点型等

                       }
                    }     
            }

截取定长数组:

接收到的数据不一定是完整的,要进行验证,而且可以一帧一帧进行处理,方法是照搬的

别人博客上的方法 :http://blog.sina.com.cn/s/blog_903d6d5d0101i7rk.html

 public static class ByteConvertToFloat
        {

            /// <summary>
            /// 截取定长的数组字节
            /// </summary>
            /// <param name="srcBytes">要被截取的源数组</param>
            /// <param name="startIndex">开始截取的索引值</param>
            /// <param name="length">要截取的字节长度</param>
            /// <returns></returns>


            public static byte[] SubByte(byte[] srcBytes, int startIndex, int length)
            {
                System.IO.MemoryStream bufferStream = new System.IO.MemoryStream();
                byte[] returnByte = new byte[] { };
                if (srcBytes == null) { return returnByte; }
                if (startIndex < 0) { startIndex = 0; }
                if (startIndex < srcBytes.Length)
                {
                    if (length < 1 || length > srcBytes.Length - startIndex)
                    {
                        length = srcBytes.Length - startIndex;
                    }
                    bufferStream.Write(srcBytes, startIndex, length);
                    returnByte = bufferStream.ToArray();
                    bufferStream.SetLength(0);
                    bufferStream.Position = 0;
                }
                bufferStream.Close();
                bufferStream.Dispose();
                return returnByte;
            }
        }

有误之处请指正,谢谢,多多交流,共同进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瓜皮肖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值