|
本帖最后由 captainandy 于 2017-5-16 14:40 编辑
由于传感器读出的数据是十进制的,int型或者float型。而数据上传时候的代码是十六进制的,在上位机又转为十进制来显示。因此会造成数据不准。
所以需要一段十进制转十六进制的代码,先转换后再上传。
在网上找了一些,发现与数据上传代码不兼容。具体为char*和unsigned char格式不同。
具体代码如下:
#include <stdio.h>
void temperature_check() //温度监控
{
int v = analogRead(A0); //读取A0口的电压值
float t = v * (5.0/1023.0*100); //使用浮点数存储温度数据,温度数据由电压值换算得到
char buf[100];
dec2hex(t,buf); //十进制转十六进制函数
// printf("%s\n",buf);
unsigned char hexdata[8] = {0xFF,0x63,0x00,buf,0xFF}; //就是这行出的问题
Serial.write(hexdata, 8); //发送数据包
// Serial.println(t); //串口输出温度数据
delay(1000); //等待1秒,控制刷新速度
}
void dec2hex(int n,char *buf) //十进制转十六进制函数
{
char t;
char *p=buf;
while(n)
{
t=n%16;
*buf++=t<10?t+'0':t-10+'A';
n/=16;
}
*buf++='0';
*buf--='\0';
while(p<buf)
{
t=*p;
*p=*buf;
*buf=t;
++p;
--buf;
}
}
void setup() {
Serial.begin(9600); //使用9600速率进行串口通讯
}
void loop()
{
while(1)
{
temperature_check();
}
}
不知该如何解决? |
|