|
|
我用的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讀時,源數據就變成亂碼了,這是什么原因?
|
|