项目里用DHT11温湿度传感器搞了好久好久,始终发现不了问题,好无助新手小白
求大神帮帮忙 真的不觉得自己时序有错 发送数据到串口 ack=1 dat始终=255
#include "dht11.h"
#include "delay.h"
u8 ack,hh;
u8 BUF[5];
long long value=0;
void DHT11_Init()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_SetBits(GPIOA, GPIO_Pin_7);
delay_ms(1000);
}
void input_mode()
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
void output_mode()
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
void DHT11_send()
{
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
delay_ms(18);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
delay_us(30);
input_mode();
}
u8 DHT11_check() //check=1
{
u8 retry=50;
while(!DHT11_DQ_IN)
{
retry--;
delay_us(1);
}
if(retry ==0) return 0;//3¬ê±íË3ö
else retry=60;
while(DHT11_DQ_IN &&retry>0)
{
retry--;
delay_us(1);
}
if(retry==0) return 0;
else return 1;
}
//void Time_us(u16 count)
//{
// count--;
// delay_us(1);
//}
//u8 DHT11_Read_Bit()
//{
// u8 countdown=10;
// while((!DHT11_DQ_IN)&&countdown)
// {
// countdown--;
// delay_us(1);
// }
// delay_us(35);
// if(DHT11_DQ_IN==1) return 1;
// return 0;
//}
u8 DHT11_Read_byte()
{
u8 dat=0;
u8 i;
for(i=0;i<8;i++)
{
while(!DHT11_DQ_IN)
delay_us(40);
if( DHT11_DQ_IN) //¡°1¡±
dat=(dat<<1)+1;
else
dat=(dat<<1)+1; //¡°0¡±
}
return dat;
}
void DHT11_Get(u8 *temperature,u8* humidity )
{
// u8 i;
DHT11_send();
ack=DHT11_check();
hh=DHT11_Read_byte();
if(ack)
{
BUF[0]=DHT11_Read_byte();
BUF[1]=DHT11_Read_byte();
BUF[2]=DHT11_Read_byte();
BUF[3]=DHT11_Read_byte();
}
if(BUF[0]+BUF[1]+BUF[2]+BUF[3]==BUF[4])
{
*humidity =(BUF[0]<<4)+BUF[1];
*temperature =(BUF[2]<<4)+BUF[3];
}
}
以下是main函数部分
int main(void)
{
delay_init();
uart_init(115200);
DHT11_Init();
while(1)
{
DHT11_Init();
DHT11_Get(&humid,&temp);
delay_ms(10);
printf("
%d
",ack);
printf("
%d
",hh);
printf("
humid:%d
",humid);
printf("
temp:%d
",temp);
delay_ms(3000);
}
}
另附时序图
求大佬帮忙啊啊啊 此贴勿沉 谢谢了 真的搞了很久很难过
一周热门 更多>