欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2420|回復: 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, 下載次數: 35

回復

使用道具 舉報

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 單片機教程網

快速回復 返回頂部 返回列表