标题: arduino串口接收十六进制数,思路有点混乱求分析 [打印本页]

作者: pglakers    时间: 2018-9-14 09:36
标题: arduino串口接收十六进制数,思路有点混乱求分析
上位机通过串口发送给mega2560,一个32位的整型十六进制数  int  0xEE82EEFF  ,我要做的是,将这个数接收,并将四个字节分开保存。即:0xEE,0x82,0xEE,0xFF 。arduinio这部分代码怎么写啊。我知道serial.read()每次读取一个字节,serial.avaliable()返回的是缓冲区的字节数,但是这个十六进制怎么接收啊,用什么保存啊。
byte serialData[4]; //从串口读取的数据
if (Serial.available() > 0) {
   //读取一个字节数组
    Serial.readBytes(serialData, 4);
    //此处省略serialData[0],serialData[1],serialData[2],serialData[3],的处理代码
    Serial.flush();

}

这样的话,serialData[0],serialData[1],serialData[2],serialData[3]里面会分别是EE,82,EE,FF吗。

或者忽略上面的代码。
这一部分有点混乱,希望有大佬可以指点迷津,十分感谢

作者: iauther    时间: 2018-9-15 11:54
串口两边都有FIFO,即先进先出缓存。先发的必然是先收到,发送端从低地址开始发送数据,收到则也是从低字节开始,这样看来,serialData[0]应该对应FF才对,其它类推

作者: devcang    时间: 2018-9-16 08:13
byte(即 unsigned char),就是一个字节,并不区分是二进制、还是十进制、或十六进制,只是值不超范围就可以正确接收,,,,,串口传过来的也是字节。

所以,32位的int,接收结果是4个字节的数据,4次 Serial.read()。

Serial.readBytes(serialData, 4);
这样写也正确


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
作者: pglakers    时间: 2018-9-19 10:33
devcang 发表于 2018-9-16 08:13
byte(即 unsigned char),就是一个字节,并不区分是二进制、还是十进制、或十六进制,只是值不超范围就可以 ...

多谢啦,问题已解决
作者: pglakers    时间: 2018-9-19 10:34
iauther 发表于 2018-9-15 11:54
串口两边都有FIFO,即先进先出缓存。先发的必然是先收到,发送端从低地址开始发送数据,收到则也是从低字节 ...

对的,当时没想清楚。改过之后没问题了。谢啦
作者: WOLF_977_    时间: 2021-9-14 16:56
pglakers 发表于 2018-9-19 10:34
对的,当时没想清楚。改过之后没问题了。谢啦

你改哪里了呢      代码可以发我参考一下吗      我刚开始接触arduino    还请您指教一下




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1