Arduino串口接收16进制,如何转换成10进制?-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

123
返回列表 发新帖
楼主: kmaxzm

[未解决] Arduino串口接收16进制,如何转换成10进制?

[复制链接]
发表于 2018-7-25 10:03 | 显示全部楼层
已经非常感谢了!还是那个问题,在哪里能打赏?
发表于 2018-7-25 21:42 | 显示全部楼层
版主,追加一个问题:为什么对数串有一个取反运算?
发表于 2018-9-8 14:21 | 显示全部楼层
fairsky888 发表于 2018-7-24 18:52
虽然没有看到说明书,这已经很明显了啦,第一位FF是固定的开头,第二位86或第五位50应该是气体类型的一个 ...

留个QQ号,请教关于串口读取的数据处理。我的QQ:263522492
发表于 2018-11-26 09:29 | 显示全部楼层
fairsky888 发表于 2018-7-24 18:52
虽然没有看到说明书,这已经很明显了啦,第一位FF是固定的开头,第二位86或第五位50应该是气体类型的一个 ...

大佬,我想问下,我的甲醛传感器,应该和你用的差不多,就是校验那一步,是1-7位,相加取反。。。简单修改下了您的代码,发现数据一直是1024,,,可否告知如何解决?
发表于 2019-1-21 18:22 | 显示全部楼层
fairsky888 发表于 2018-7-23 18:05
嘿嘿,[mw_shl_code=bash,true]String comdata="";
void setup() {
Serial.begin(9600);

感谢分享!成功驱动甲醛传感器
发表于 2019-2-12 10:43 | 显示全部楼层
楼主彻底解决了吗?我按照楼下大神的做法能够读出16进制数据,但是输出的是0.000,是否是进制的问题?
发表于 2019-2-21 10:03 | 显示全部楼层
fairsky888 发表于 2018-7-24 16:17
当然是Arduino啦!!我不知道你用的什么气体传感器,我用过测甲醛,一氧化碳,臭氧的传感器,他们有两种模 ...

非常感谢,能否互加一下qq号,有项目问题请教
发表于 2019-10-16 14:20 | 显示全部楼层
fairsky888 发表于 2018-7-24 16:17
当然是Arduino啦!!我不知道你用的什么气体传感器,我用过测甲醛,一氧化碳,臭氧的传感器,他们有两种模 ...

同理,这个程序怎么实现,用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);
}  
微信截图_20191016141425.png
发表于 2019-10-18 16:29 | 显示全部楼层
大神,大神,领教了,不错不错!~
发表于 2022-4-8 23:55 | 显示全部楼层
凌云子 发表于 2019-10-16 14:20
同理,这个程序怎么实现,用UNO读取传感器串口发出的16进制数据,转换成10进制数据用串口发送到上位机, ...

请问一下解决了吗
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 00:34 , Processed in 0.145427 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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