二、传感器参数及程序
void DHT11_io_set(void)
{
rcu_periph_clock_enable(RCU_GPIOB);
gpio_init(GPIOB,GPIO_MODE_OUT_PP,GPIO_OSPEED_MAX,GPIO_PIN_11);
}
static void DHT11_out_set(void)
{
gpio_init(GPIOB,GPIO_MODE_OUT_PP,GPIO_OSPEED_MAX,GPIO_PIN_11);
}
static void DHT11_in_set(void)
{
gpio_init(GPIOB,GPIO_MODE_IN_FLOATING,GPIO_OSPEED_MAX,GPIO_PIN_11);
}
static void DHT11_rst(void)
{
DHT11_out_set();
DHT11_out=0;
delay_ms(20);
DHT11_out=1;
delay_us(30);
}
u8 DHT11_check(void)
{
u8 retry=0;
DHT11_in_set();
while((DHT11_in==SET)&&retry<100)
{
retry++;
delay_us(1);
}
if(retry>100)
{
return ERROR;
}
else
{
retry=0;
}
while((DHT11_in!=SET)&&retry<100)
{
retry++;
delay_us(1);
}
if(retry>100)
{
return ERROR;
}
else
{
return SUCCESS;
}
}
static u8 DHT11_read_bit(void)
{
u8 retry=0;
while((DHT11_in==SET)&&retry<100)
{
retry++;
delay_us(1);
}
retry=0;
while((DHT11_in!=SET)&&retry<100)
{
retry++;
delay_us(1);
}
delay_us(40);
if(DHT11_in==SET)
{
return 1;
}
else
{
return 0;
}
}
u8 DHT11_get_zvalue(u8* humi,u8* temp)
{
u8 buf[5]={0};
u8 i=0;
DHT11_rst();
if(DHT11_check()==SUCCESS)
{
for(i=0;i<5;i++)
{
buf[i]=DHT11_read_byte();
}
if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
{
*humi=buf[0];
*temp=buf[2];
}
}
else
{
return ERROR;
}
return SUCCESS;
}
u8 DHT11_get_fvalue(float* humi,float* temp)
{
u8 buf[5]={0};
u8 i=0;
DHT11_rst();
if(DHT11_check()==SUCCESS)
{
for(i=0;i<5;i++)
{
buf[i]=DHT11_read_byte();
}
if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
{
*humi=((buf[0]*10.0)+buf[1])/10.0;
*temp=((buf[2]*10.0)+buf[3])/10.0;
}
}
else
{
return ERROR;
}
return SUCCESS;
}
|