找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1602|回复: 3
打印 上一主题 下一主题
收起左侧

STM32 IED DHT11温湿度传感器程序问题

[复制链接]
跳转到指定楼层
楼主
ID:938707 发表于 2021-7-31 21:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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);
          }
}



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:938707 发表于 2021-7-31 21:05 | 只看该作者
我的问题是单片机复位一次测一次温湿度,不能连续测,只有最开始的那次测了,后面的但是重复最开始测的那个值
回复

使用道具 举报

板凳
ID:938707 发表于 2021-7-31 21:15 | 只看该作者
file:///C:/Users/Administrator/Desktop/QQ%E6%88%AA%E5%9B%BE20210731211426.png
这是没复位的现象
回复

使用道具 举报

地板
ID:938707 发表于 2021-7-31 21:18 | 只看该作者
file:///C:/Users/Administrator/Desktop/QQ%E6%88%AA%E5%9B%BE20210731211705.png
这是按了复位的现象
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表