|
小弟新刚刚上手arduino没多久,现在打算用arduino UNO r3接收一个倾角传感器的数据,收到的数据很奇怪
下面是传感器的通信协议(应答命令里面数据域是3byte,图片上面标错了)
数据格式: 16进制
标示符:固定为77
数据长度:从数据长度到校验和(包括校验和)的长度
地址码:采集模块的地址,默认为00
数据域:根据命令字不同内容和长度相应变化。
校验和:数据长度、地址码、命令字和数据域的和不考虑进位
命令结束符:0D 0A
下面是代码,现在的情况是串口收到的数据完全是混乱的,连标示符都收不到,求大神帮忙 - #include <SoftwareSerial.h>
- SoftwareSerial Serial1(10,11);
- void setup() {
- Serial.begin(9600);
- Serial1.begin(9600);
- Serial1.write(0x77);
- Serial1.write(0x04);
- Serial1.write((byte)0x00);
- Serial1.write(0x01);
- Serial1.write(0x05);
- Serial1.write(0x0D);
- Serial1.write(0x0A);//给传感器发送指令,让其工作,发送数据。
- delay(1000);
- }
- byte jieshou[9];
- byte flag=0;
- byte inByte;
- void loop() {
- if (Serial1.available() > 0&&flag==0)
- {
- delay(10);
- if(inByte==0x77)//检验标识符
- {
- for(int i=0;i<9;i++)
- {
- if(Serial1.available()>0) jieshou[i]=Serial1.read();
- delay(10);
- }
- if(jieshou[7]==0x0D&&jieshou[8]==0x0A)flag=1;//检验命令结束符
- }
- }
- if(flag==1)
- {
- int a=jieshou[3];//符号部分,0为正,1为负
- int b=jieshou[4];//整数部分
- int c=jieshou[5];//小数部分
- float jiaodu=b+c/100;
- if(a==0){Serial.print(jaodu);}
- else{Serial.print(jaodu);}
- for(int i=0;i<9;i++)
- {
- jieshou[i]=0x00;
- }
- flag=0;
- }
- }
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|