极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20199|回复: 7

arduino接收16进制数据的问题

[复制链接]
发表于 2016-10-24 10:44:24 | 显示全部楼层 |阅读模式
我用arduino连接传感器得到的数据是FF CC 05 A5 A0 00 00 FF CC 05 80 A0 01 DA FF CC 05 80 A0 01 DA FF CC 05 80 A0 01 DA FF CC 05 7F A0 01 D9 FF CC 05 7F A0 01 D9 FF CC 05 7F A0 01 D9 FF CC 05 7F A0 01 D9 FF CC 05 80 A0 01 DA FF CC 05 7F A0 01 D9 FF CC 05 7F A0 01 D9 FF CC 05 7E A0 01 D8 FF CC 05 7F A0 01 D9 FF CC 05 7F A0 01 D9 FF CC 05 7F A0 01 D9 。。。。
传感器发送回来的数据格式是七个字节,但是有用的数据就是后面两位,倒数第二位在高字节,倒数第一位在低字节,组成的十六进制数据转化为十进制就是所要求的的数据,但是我现在怎么把这两个字节给提取出来并且转化成十进制啊,跪求大神讲解
//【char A[5] = {0xFF, 0xCC, 0x03, 0xA3, 0xA0};

void setup() {
  // put your setup code here, to run once:

Serial1.begin(115200);

Serial.begin(115200);
Serial1.write(0xFF);
Serial1.write(0xCC);
Serial1.write(0x03);
Serial1.write(0xA3);
Serial1.write(0xA0);

}

void loop() {char col;
char str[7];
//Serial.write(&A[0, 5]);
int i=0;
  // put your main code here, to run repeatedly:
  while (Serial1.available() > 0) {
    col = Serial1.read();
str[i]=col;
i++;
if(i=6){
  i=0;
}
    int high=str[5];
    int low=str[6];
    int x=(high<<8)|low;
    Serial.write(x);

  }
  //Serial.flush();
//  Serial.println("2");
}
我这样串口显示的数据是00 00 00 00 00 00 00 00 00 。。。。
请问是哪里出了问题啊
回复

使用道具 举报

发表于 2016-10-24 19:59:14 | 显示全部楼层
先说一个问题,i是可以等于6的,应该是i=7的时候i=0
还有,串口接收数据的时候是一位一位接受的,FF其实是分成两次接收,每次都会接受F
回复 支持 0 反对 1

使用道具 举报

发表于 2016-10-24 11:07:57 | 显示全部楼层
建议这样写代码先试试看收到的数据对不对:
void loop{
unsigned char col;
while (Serial1.available() > 0) {
    col = Serial1.read();
    Serial.write(col,HEX);
    delay(1);
}
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-24 11:10:48 | 显示全部楼层
antbot 发表于 2016-10-24 11:07
建议这样写代码先试试看收到的数据对不对:
void loop{
unsigned char col;

显示错误啦
exit status 1
call of overloaded 'write(unsigned char&, int)' is ambiguous

回复 支持 反对

使用道具 举报

发表于 2016-10-24 16:37:46 | 显示全部楼层
zhihuazhu 发表于 2016-10-24 11:10
显示错误啦
exit status 1
call of overloaded 'write(unsigned char&, int)' is ambiguous

把Serial.write改成Serial.println
回复 支持 反对

使用道具 举报

发表于 2016-10-24 21:58:24 | 显示全部楼层
你们都没看出问题在哪里么
if(i=6)要改成if(i==6)啊
又是一个C语言初学者
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-17 17:01:45 | 显示全部楼层
zjz5717 发表于 2016-10-24 19:59
先说一个问题,i是可以等于6的,应该是i=7的时候i=0
还有,串口接收数据的时候是一位一位接受的,FF其实是 ...

您说得很对,对于i的问题是我没有考虑清楚,已经修改了。
但是对于数据一位一位接收的问题,我不太清楚改样把接收到的后最后两个数据作为呼吸数据计算出来。
求大神详细讲解一下,拜谢
回复 支持 反对

使用道具 举报

发表于 2017-4-26 22:09:48 | 显示全部楼层
char AA[]="af";
String BB ="EE";
void setup() {
  Serial.begin(9600);
}
void loop() {
int i= strtol(AA,NULL,16);
  Serial.print(i);
Serial.print(",");
i= strtol(BB.c_str(),NULL,16);
  Serial.println(i);
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 05:34 , Processed in 0.042009 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表