uint8_t DHT11_Read_Data(uint8_t *temp,uint8_t *humi)
{
uint8_t buf[5];
uint8_t i;
DHT11_Rst();
if(DHT11_Check()==0)
{
printf("fffff");
for(i=0;i<5;i++)//读取40位数据
{
buf[i]=DHT11_Read_Byte();
}
if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
{
printf("ok");
*humi=buf[0];
*temp=buf[2];
}
if((buf[0]+buf[1]+buf[2]+buf[3])!=buf[4])
{
printf("读取失败");
}
}
else
return 1;
return 0;
}以上代码为读取温湿度,但总是读取失败, if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])这句循环一直无法进入,寻求指教!!!
引用: annysky2012 发表于 2021-3-4 22:50 还有你的电路设计的是不是有问题。
我在总线和温湿度传感器之间加了一个0欧姆的电阻,硬件本身没有上拉
引用: Jacktang 发表于 2021-3-4 21:04 不一定是代码问题 检查下硬件接口是不是有错误
while (DHT11_DQ_IN&&retry<100)//DHT11会拉低40~80us
{
retry++;
delay_us(1);
};
if(retry>100)
{
printf("不存在");
return 1;
}
else
{
printf("存在");
retry=0;
}
if(retry>100)这里如果把100改为120就会打印存在,如果不改则打印不存在,这个100代表什么
如果有逻辑分析仪可以拿逻辑分析仪抓一下!