找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2225|回復(fù): 3
收起左側(cè)

單片機(jī)+SHT30濕度值在50度以上時變成亂碼?

[復(fù)制鏈接]
ID:525244 發(fā)表于 2022-3-1 09:38 | 顯示全部樓層 |閱讀模式
我用的STC8A8K64S4A12單片機(jī),5V電壓,采集的SHT30數(shù)據(jù)進(jìn)行CRC8校驗(yàn),校驗(yàn)正確了才進(jìn)行計(jì)算顯示,能夠顯示數(shù)值,應(yīng)該都上來的數(shù)據(jù)是正確的。
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);  //寫入從機(jī)地址,以及指令
          Delay_1ms(5); //至少等待1.5ms
          I2C_ReadNByte(SHT30_ADDR1,buffer_Receviedat,6);
               
                        if(SHT3X_CalcCrc(buffer_Receviedat,2)==buffer_Receviedat[2])//校驗(yàn)溫度數(shù)據(jù)
                        {
                        
                                        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])//校驗(yàn)溫度數(shù)據(jù)
                        {
                        
                        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);//串口發(fā)送讀上來的數(shù)值和轉(zhuǎn)換后的溫濕度值。
}

下邊是串口接收的數(shù)據(jù):
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  


當(dāng)濕度數(shù)值大于44讀時,源數(shù)據(jù)就變成亂碼了,這是什么原因?

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

79.96 KB, 下載次數(shù): 35

回復(fù)

使用道具 舉報(bào)

ID:525244 發(fā)表于 2022-3-1 09:57 | 顯示全部樓層
解決了,數(shù)據(jù)組合問題,改成這樣沒問題了

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:525244 發(fā)表于 2022-3-1 09:57 | 顯示全部樓層
數(shù)據(jù)組合問題,改成這樣沒問題了
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);  //寫入從機(jī)地址,以及指令
        Delay_1ms(5); //至少等待1.5ms
        I2C_ReadNByte(SHT30_ADDR1,buffer_Receviedat,6);

        if(SHT3X_CalcCrc(buffer_Receviedat,2)==buffer_Receviedat[2])//校驗(yàn)溫度數(shù)據(jù)
        {
        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])//校驗(yàn)溫度數(shù)據(jù)
        {
       
        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);
}
回復(fù)

使用道具 舉報(bào)

ID:1065002 發(fā)表于 2023-3-3 09:49 來自觸屏版 | 顯示全部樓層
zgrfox110 發(fā)表于 2022-3-1 09:57
數(shù)據(jù)組合問題,改成這樣沒問題了
void Getdat_SHT30()
{

0度以下顯示錯誤,報(bào)錯,卡死,哪里問題
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表