Arduino 通过串口给上位机发数据包研究
前言
目前有个需求是要用Arduino从寄存器读传感器数据,然后把数据发送给Unity开发的上位机,在发送数据时,通过协议确定数据包的格式。
数据传输协议
需要根据实际情况制定传输协议
//这里构建一个7位数组
byte sendArray[7];
0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
报头 | 报文1 | 报文2 | 报文3 | 报文4 | 报文5 | 报尾 |
- 报头
- 报文1 为数据类型
- 报文2 为数据1高位
- 报文3 为数据1低位
- 报文4 为数据2高位
- 报文5 为数据2低位
- 报尾 为验证位
填入报文
报文具体内容自行定义
//设置报头
sendArray[0]=byte(0x37);
//设置当前数据是哪个类型的
sendArray[1]=byte(0x33);
//要发送的数据
short sVal = 8;
//定义高低位
byte bHIGH, bLow;
//右移8位 计算数据高位
bHIGH = sVal >>8;
//与运算符 计算数据低位 &表示按位与,只有两个位同时为1,才能得到1
bLow = sVal & 0xFF;
sendArray[2]=bLow ;
sendArray[3]=bHIGH ;
//下面是测试数据
sendArray[4]=0 ;
sendArray[5]=1 ;
//报尾可以计算上面所有低位的和
sendArray[6]=bLow + 1;
上位机解析
从报头开始拆包,每7位拆成一个包,读取报文1区分类型,按照以下方法解析出包内内容,这里最好计算最后一位校验位是否相同,保证数据完整性。
var x = ((short)(oneGroup[3] << 8) | oneGroup[2])
var y = ((short)(oneGroup[5] << 8) | oneGroup[4])