2022-6-11 11:43:56 [显示全部楼层]
1934浏览
查看: 1934|回复: 1

[求助] Arduino串口通讯十六进制少前导零问题

[复制链接]
本帖最后由 LK 于 2022-6-11 11:45 编辑

大家好,我在淘宝买了一个电量模块。可以通过串口命令帧调试获取参数。如图:
Arduino串口通讯十六进制少前导零问题图1
在我使用串口调试的时候,可以正常返回数据。
虽然我在使用Arduino串口获取数据的时候也返回了数据,代码如下:
  1. #include <SoftwareSerial.h>
  2. char item[7] = {0x55, 0x55, 0x01, 0x01, 0x00, 0x00, 0xAC};  //16进制命令
  3. unsigned long buf[20];  //接收到的16进制字符串
  4. String data = "";
  5. String data_to_hex = "";
  6. SoftwareSerial RS485(3, 2);   //RX, TX
  7. void setup() {
  8.   // put your setup code here, to run once:
  9.   RS485.begin(9600);
  10.   Serial.begin(115200);
  11. }
  12. void loop() {
  13.   // put your main code here, to run repeatedly:
  14.   delay(1000);
  15.   data = "";
  16.   RS485.write(item, 7);
  17.   while(RS485.available()>0){
  18.     int i = 0;
  19.     buf[i] = (unsigned char)RS485.read();
  20.     Serial.print(buf[i]);
  21.     Serial.print(",");
  22.     data += String(buf[i], HEX);
  23.     data += ",";
  24.     i++;
  25.   }
  26.   Serial.println("");
  27.   Serial.println(data);
  28. }
复制代码

但是有一个不完美的地方:把返回的数据转化成十六进制之后,格式并没有按照预期的显示:
Arduino串口通讯十六进制少前导零问题图2
我疑惑的点是:为什么转化后的十六进制不像普通的显示一样是两位的比如第一行中十进制:85,85,1,1,0,12,0,3,170,176,0,0,0,0,0,0,0,0,21,
转化成十六进制后应该为:55,55,01,01,00,0c,00,03,aa,b0,00,00,00,00,00,00,00,00,15,而不是像串口显示的一样是55,55,1,1,0,c,0,3,aa,b0,0,0,0,0,0,0,0,0,15,,每个字节只有一个数字。如果少了一个0,会导致我最终算出来的电压等参数会有偏差,所以这个零不能少
求解,万分感激~~~


R2D2  NPC

发表于 2022-6-11 22:07:16

16进制少个0 对最后的数字有什么影响? 不太理解。 00 就是对应10进制的0啊,
回复

使用道具 举报

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail