|
我用的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í),源數(shù)據(jù)就變成亂碼了,這是什么原因?
|
|