TempHumiValue_t temp_humi_Value;
// TempHumiValue_t *temp_humi_Va;
u16 tem,hum;
u16 buff[6];
float Temperature=0;
float Humidity=0;
IIC_Start();
IIC_SendByte(addr<<1 | write);//寫7位I2C設備地址加0作為寫取位,1為讀取位
IIC_wait_ACK();
IIC_SendByte(0x2C);
IIC_wait_ACK();
IIC_SendByte(0x06);
IIC_wait_ACK();
IIC_Stop();
delay_ms(50);
IIC_Start();
IIC_SendByte(addr<<1 | read);//寫7位I2C設備地址加0作為寫取位,1為讀取位
if(IIC_wait_ACK()==0)
{
buff[0]=IIC_RcvByte();
IIC_ACK();
buff[1]=IIC_RcvByte();
IIC_ACK();
buff[2]=IIC_RcvByte();
IIC_ACK();
buff[3]=IIC_RcvByte();
IIC_ACK();
buff[4]=IIC_RcvByte();
IIC_ACK();
buff[5]=IIC_RcvByte();
IIC_NACK();
IIC_Stop();
}
tem = ((buff[0]<<8) | buff[1]);//溫度拼接
hum = ((buff[3]<<8) | buff[4]);//濕度拼接
/*轉換實際溫度*/
Temperature= tem ;// T = -45 + 175 * tem / (2^16-1)
Humidity= hum;// RH = hum*100 / (2^16-1)
temp_humi_Value.temperature=Temperature;
temp_humi_Value.humidity=Humidity;
if((Temperature>=-20)&&(Temperature<=125)&&(Humidity>=0)&&(Humidity<=100))//過濾錯誤數據
{
temp_humi_Value.temperature=Temperature;
temp_humi_Value.humidity=Humidity;
printf("溫度為%f,濕度為%f%% \r\n",temp_humi_Value.temperature,temp_humi_Value.humidity);
}
hum=0;
tem=0;
|