找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1250|回复: 3
打印 上一主题 下一主题
收起左侧

单片机+SHT30湿度值在50度以上时变成乱码?

[复制链接]
跳转到指定楼层
楼主
ID:525244 发表于 2022-3-1 09:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的STC8A8K64S4A12单片机,5V电压,采集的SHT30数据进行CRC8校验,校验正确了才进行计算显示,能够显示数值,应该都上来的数据是正确的。
void Getdat_SHT30()
{
    unsigned long     rawValueTemp;    // temperature raw value from sensor
    unsigned long     rawValueHumi;    // humidity raw value from sensor


                I2C_WriteNByte(SHT30_ADDR1,buffer_SHT30_TX1,2);  //写入从机地址,以及指令
          Delay_1ms(5); //至少等待1.5ms
          I2C_ReadNByte(SHT30_ADDR1,buffer_Receviedat,6);
               
                        if(SHT3X_CalcCrc(buffer_Receviedat,2)==buffer_Receviedat[2])//校验温度数据
                        {
                        
                                        rawValueTemp =(buffer_Receviedat[0] << 8) | buffer_Receviedat[1];
                                       
                                        temp =(int)((1750 *rawValueTemp >>16) - 450);
                                //temp =(int)((21875 *rawValueTemp)>>13);        
                                       
                                                
                        }        
                        else
                        {
                                rawValueTemp=0;
                            temp=0;
                        }               
        
                        if(SHT3X_CalcCrc(&buffer_Receviedat[3],2)==buffer_Receviedat[5])//校验温度数据
                        {
                        
                        rawValueHumi =(buffer_Receviedat[3] << 8) | buffer_Receviedat[4];
                        humi =(int)((1000 *rawValueHumi)>>16);        
                        //humi =(int)((12500 *rawValueHumi)>>13);        
                                
                        }        
                        else
                        {
                                rawValueHumi=0;
                            humi=0;
                        }
            writedata(rawValueTemp,temp,rawValueHumi,humi);//串口发送读上来的数值和转换后的温湿度值。
}

下边是串口接收的数据:
EMPAD=00026095 TEMP=0024.6    humiAD=00012981    humi=0019.8   
TEMPAD=00026090 TEMP=0024.6    humiAD=00013002    humi=0019.8   
TEMPAD=00026090 TEMP=0024.6    humiAD=00013002    humi=0019.8   
TEMPAD=00026137 TEMP=0024.7    humiAD=00012964    humi=0019.7   
TEMPAD=00026137 TEMP=0024.7    humiAD=00012964    humi=0019.7   
TEMPAD=00026596 TEMP=0026.0    humiAD=00019780    humi=0030.1   
TEMPAD=00026596 TEMP=0026.0    humiAD=00019780    humi=0030.1   
TEMPAD=00026892 TEMP=0026.8    humiAD=00029266    humi=0044.6   
TEMPAD=00026892 TEMP=0026.8    humiAD=00029266    humi=0044.6   
TEMPAD=00026892 TEMP=0026.8    humiAD=00029266    humi=0044.6   
TEMPAD=00027008 TEMP=0027.1    humiAD=94937396    humi=6683.9   
TEMPAD=00027008 TEMP=0027.1    humiAD=94937396    humi=6683.9   
TEMPAD=00027135 TEMP=0027.4    humiAD=94941842    humi=6690.7  


当湿度数值大于44读时,源数据就变成乱码了,这是什么原因?

sht30C51 - 度温度正常 (2).zip

79.96 KB, 下载次数: 34

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:525244 发表于 2022-3-1 09:57 | 只看该作者
解决了,数据组合问题,改成这样没问题了

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:525244 发表于 2022-3-1 09:57 | 只看该作者
数据组合问题,改成这样没问题了
void Getdat_SHT30()
{
    unsigned long     rawValueTemp;    // temperature raw value from sensor
    unsigned long     rawValueHumi;    // humidity raw value from sensor
   

        I2C_WriteNByte(SHT30_ADDR1,buffer_SHT30_TX1,2);  //写入从机地址,以及指令
        Delay_1ms(5); //至少等待1.5ms
        I2C_ReadNByte(SHT30_ADDR1,buffer_Receviedat,6);

        if(SHT3X_CalcCrc(buffer_Receviedat,2)==buffer_Receviedat[2])//校验温度数据
        {
        rawValueTemp =buffer_Receviedat[0];
        rawValueTemp =rawValueTemp<<8;
        rawValueTemp =rawValueTemp| buffer_Receviedat[1];
       
                //rawValueTemp =(buffer_Receviedat[0] << 8) | buffer_Receviedat[1];
               
                temp =(int)((1750 *rawValueTemp >>16) - 450);
                //temp =(int)((21875 *rawValueTemp)>>13);       
               
                       
        }       
        else
        {
                rawValueTemp=0;
                temp=0;
        }               

        if(SHT3X_CalcCrc(&buffer_Receviedat[3],2)==buffer_Receviedat[5])//校验温度数据
        {
       
        rawValueHumi =buffer_Receviedat[3];
        rawValueHumi =rawValueHumi<<8;
        rawValueHumi =rawValueHumi| buffer_Receviedat[4];
        //rawValueHumi =(buffer_Receviedat[3] << 8) | buffer_Receviedat[4];
        humi =(int)((1000 *rawValueHumi)>>16);       
        //humi =(int)((12500 *rawValueHumi)>>13);       
               
        }       
        else
        {
                rawValueHumi=0;
                humi=0;
        }
    writedata(rawValueTemp,temp,rawValueHumi,humi);
}
回复

使用道具 举报

地板
ID:1065002 发表于 2023-3-3 09:49 来自手机 | 只看该作者
zgrfox110 发表于 2022-3-1 09:57
数据组合问题,改成这样没问题了
void Getdat_SHT30()
{

0度以下显示错误,报错,卡死,哪里问题
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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