今天在看 DHT11数字温湿度传感器实验 视频时,发现例程中存在一点问题。见下边函数:
u8 DHT11_Read_Bit(void)
{
u8 retry=0;
while(DHT11_DQ_IN&&retry<100)
{
retry++;
delay_us(1);
}
retry=0; <----------
while(!DHT11_DQ_IN&&retry<100)
{
retry++;
delay_us(1);
}
delay_us(40);
if(DHT11_DQ_IN)return 1;
else return 0;
}
上边箭头处标出的程序是有问题的地方,这个函数中并未像DHT11_Check(那样在跳出循环后对retry的值进行判断和进一步处理(视频中讲到此处时也觉得顿了一下,之后绕过去了)。更加健壮的程序应为:
if(retry>=100)
return 0xFF;
下边的while循环下边的语句也要如此判断。 |