同理,这个程序怎么实现,用UNO读取传感器串口发出的16进制数据,转换成10进制数据用串口发送到上位机,根据所提供的程序进行修改,上位机能读取16进制的,10进制数出始终是0,是我改的程序哪里有问题吗,希望大神指正。
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX ,定义传感器串口
String comdata="";
unsigned char DEC1,DEC2;float length;
int CheckSum;
byte Command[ ]={0xFF,0x00,0x00,0xDE}; //上传数据类型
void setup()
{
Serial.begin(9600);
mySerial.begin(9600);
}
void loop()
{
while(mySerial.available()>0) //传感器有数据输入
{
comdata+=char(mySerial.read());
delay(2);
}
if(comdata.length()>0)
{
CheckSum=0x00;
for(int x=0;x<comdata.length();x++)
{
if(x<4)CheckSum+=comdata[x]; //计算校验和
myPtHex(comdata[x]); //16进制串口输出。接收的是什么代码。
}
CheckSum=~(CheckSum&&0xFF); //取反
if(comdata[4]==CheckSum)
{
DEC1=comdata[2]; //取16进制第二位
DEC2=comdata[3]; //取16进制第三位
int length=DEC1*256+DEC2;
length=length/1000.0;
}
Serial.println(length,0);
comdata="";
}
}
void myPtHex(int g) // 把 g 最右边 byte 打印成 Hex 两位
{
int a = g& 0xf0; // 左边 4 bits
a = a >> 4; // 右移 4 bits
int b = g& 0x0f; // 右边 4 bits
char c = a < 10 ? a + '0' : a + 'A' - 10;
Serial.write(c);
c = b < 10 ? b + '0' : b + 'A' - 10;
Serial.write(c);
} |