|
本帖最后由 lowkeydan 于 2022-6-1 15:57 编辑
各位大神好,小弟最近用arduino读取一个电量计量模块,遇到问题:当我尝试向模块发送命令帧并且得到了返回的数据时发现返回的帧有缺一个0的问题。问题描述如下:
首先是arduino代码:- #include <SoftwareSerial.h>
- int vot;
- byte item[7] = {0x55, 0x55, 0x01, 0x01, 0x00, 0x00, 0xAC}; //16进制测温命令
- String data = ""; //接收到的16进制字符串
- SoftwareSerial RS485(3, 2); //RX, TX
- void setup()
- {
- RS485.begin(9600);
- Serial.begin(115200);
- }
- void loop()
- {
- delay(1000); //放慢输出频率
- RS485.write(item, 7);
- delay(1000); // 等待测温数据返回
- data = "";
- while (RS485.available()) //从串口中读取数据
- {
- unsigned char in = (unsigned char)RS485.read(); //read读取
- // Serial.print(in,HEX);
- // Serial.print(',');
- data += String(in, HEX);
- data += ',';
- }
- if (data.length() > 0) //输出接收到的数据
- {
- Serial.print("data数据: ");
- Serial.println(data);
- }
- }
复制代码
模块成功返回了帧信息,如图:
问题来了:
为什么返回的data数据没有前导0和后缀0,按理说返回的十六进制格式应该是类似:55,55,01,01,00,0C,00,30,之类的。而不是想我这样的:55,55,1,1,0,C,0,3。
少零会导致我把十六进制的数据转化成十进制的时候数据会出现偏差。
我这个是个电压模块,如果按照下图8后面少了一个零的数据去换算,
电压直接从原来230v变成了14v。
。
本人arduino新手,百思不得其解,还望不灵赐教~在此谢过。
|
|