uint8_t Rh_byte1,Rh_byte2;
uint8_t Temp_byte1,Temp_byte2;
uint16_t sum;
uint8_t check=0;
GPIO_InitTypeDef GPIO_InitStruct;
void set_gpio_output(void)
{
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
}
void set_gpio_input(void)
{
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
}
void DHT11_start(void)
{
set_gpio_output();
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, 0);
HAL_Delay(24);
set_gpio_input();
}
void check_response(void)
{
delay_us(40);
if(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_0) == 0)
{
delay_us(80);
if(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_0) == 1)
check=1;
}
while(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_0)==1);
}
uint8_t read_data(void)
{
uint8_t i=0,j;
for(j=0;j<8;j++)
{
while(!(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_0)));
delay_us(40);
if((HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_0))==0)
{
i&= ~(1<<(7-j));
}
else
i|=(1<<(7-j));
while((HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_0)));
}
return i;
}
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
DHT11_start();
check_response();
Rh_byte1=read_data();
Rh_byte2=read_data();
Temp_byte1=read_data();
Temp_byte2=read_data();
sum=read_data();
while(sum==(Rh_byte1+Rh_byte2+Temp_byte1+Temp_byte2))
{
printf("溫度是:%d.%d C ",Temp_byte1,Temp_byte2);
HAL_Delay(2);
printf("濕度是:%d.%d H\r\n",Rh_byte1,Rh_byte2);
HAL_GPIO_TogglePin(D1_GPIO_Port, D1_Pin);
HAL_Delay(1000);
}
}
|