标题: 单片机+SHT30湿度值在50度以上时变成乱码? [打印本页]

作者: zgrfox110    时间: 2022-3-1 09:38
标题: 单片机+SHT30湿度值在50度以上时变成乱码?
我用的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, 下载次数: 35


作者: zgrfox110    时间: 2022-3-1 09:57
解决了,数据组合问题,改成这样没问题了
作者: zgrfox110    时间: 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);
}

作者: lc0619    时间: 2023-3-3 09:49
zgrfox110 发表于 2022-3-1 09:57
数据组合问题,改成这样没问题了
void Getdat_SHT30()
{

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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1