小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 6842|回复: 1

求一段十进制转十六进制代码,用于传感器数据上传

[复制链接]
发表于 2017-5-16 14:37:40 | 显示全部楼层 |阅读模式
本帖最后由 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();
    }
}

不知该如何解决?
回复

使用道具 举报

 楼主| 发表于 2017-5-17 13:29:09 | 显示全部楼层
嗯,我想多了,根本不需要转换
直接用十进制的温度变量替代例程中的0x08就可以了,而不是替代08
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-11-23 00:14 , Processed in 1.094736 second(s), 18 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

快速回复 返回顶部 返回列表