爱板网论坛

查看: 711|回复: 0

[分享] 【涂鸦TYDE3.0开发板试用体验】LED开关&DHT11温湿度传感器

[复制链接]

主题

好友

729

积分

举人

  • TA的每日心情
    开心
    2018-6-12 13:47
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2018-2-25 00:06:43 |显示全部楼层
        板子上面没啥外设,我就接上我手头上两个比较常用的外设,LED照明灯和DHT11温湿度传感器吧。
        控制LED需要开关二进制变量,而例程中的代码刚好就有开关量的设置,我这里用全局变量来做开关量:
    1. static unsigned char dp_download_led_switch_handle(const unsigned char value[], unsigned short length)
    2. {
    3.   //示例:当前DP类型为BOOL
    4.   unsigned char ret;
    5.   //0:关/1:开
    6.   unsigned char led_switch;
    7.   
    8.   led_switch = mcu_get_dp_download_bool(value,length);
    9.         over_led_switch=led_switch;
    10.   
    11.   ret = mcu_dp_bool_update(DPID_LED_SWITCH,led_switch);
    12.   if(ret==SUCCESS)
    13.     return SUCCESS;
    14.   else
    15.     return ERROR;
    16. }
    复制代码
        在主函数的循环里面控制LED灯(LED灯的引脚接到PB0上):
    1.   if(over_led_switch==1) HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,0);
    2.                 else  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,1);
    复制代码
        DHT11相关初始化和读写函数:
    1. #ifndef _DHT11_H
    2. #define _DHT11_H
    3. #include "stm32f1xx.h"

    4. #define DHT11_GPIO GPIOA
    5. #define DHT11_GPIO_CLOEN         __HAL_RCC_GPIOA_CLK_ENABLE()
    6. #define DHT11_PIN GPIO_PIN_1
    7. #define DHT11_PIN_SET HAL_GPIO_WritePin(DHT11_GPIO,DHT11_PIN,1)
    8. #define DHT11_PIN_CLR HAL_GPIO_WritePin(DHT11_GPIO,DHT11_PIN,0)
    9. #define DHT11_PIN_Read HAL_GPIO_ReadPin(DHT11_GPIO,DHT11_PIN)

    10. #define DHT11_PIN_IN()  {DHT11_GPIO->CRL&=0XFFFFFF0F;DHT11_GPIO->CRL|=0X00000080;}
    11. #define DHT11_PIN_OUT() {DHT11_GPIO->CRL&=0XFFFFFF0F;DHT11_GPIO->CRL|=0X00000030;}

    12. void DHT11_Reset()          
    13. {                 
    14.         DHT11_PIN_OUT();        
    15.         DHT11_PIN_CLR;        
    16.         Delay_ms(20);
    17.         DHT11_PIN_SET;
    18.         Delay_us(30);
    19. }

    20. int DHT11_Check()
    21. {   
    22.         int retry=0;
    23.         DHT11_PIN_IN();
    24.         while (DHT11_PIN_Read&&retry<100)
    25.         {
    26.                 retry++;
    27.                 Delay_us(1);
    28.         };
    29.        
    30.         if(retry>=100)return 1;
    31.         else retry=0;
    32.         while (!DHT11_PIN_Read&&retry<100)
    33.         {
    34.                 retry++;
    35.                 Delay_us(1);
    36.         };
    37.         if(retry>=100)return 2;            
    38.         return 0;
    39. }

    40. int DHT11_Init()
    41. {
    42.         DHT11_GPIO_CLOEN;
    43.   GPIO_InitStruct.Pin=DHT11_PIN;
    44.   GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;
    45.   GPIO_InitStruct.Pull=GPIO_NOPULL;
    46.   GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_HIGH;
    47.   HAL_GPIO_Init(DHT11_GPIO,&GPIO_InitStruct);
    48.         DHT11_PIN_OUT();
    49.         DHT11_PIN_CLR;
    50.         DHT11_Reset();
    51.         return DHT11_Check();
    52. }

    53. int DHT11_Read_Bit()                          
    54. {
    55.         int retry=0;
    56.         while(DHT11_PIN_Read&&retry<100)
    57.         {
    58.                 retry++;
    59.                 Delay_us(1);
    60.         }
    61.         retry=0;
    62.         while(!DHT11_PIN_Read&&retry<100)
    63.         {
    64.                 retry++;
    65.                 Delay_us(1);
    66.         }
    67.         Delay_us(40);
    68.         if(DHT11_PIN_Read) return 1;
    69.         else return 0;  
    70. }

    71. char DHT11_Read_Byte()   
    72. {        
    73.         char i,dat;
    74.         dat=0;
    75.         for(i=0;i<8;i++)
    76.         {
    77.                    dat<<=1;
    78.             dat|=DHT11_Read_Bit();
    79.   }
    80.        
    81.         return dat;
    82. }

    83. int DHT11_Read_Data(uint8_t *temp,uint8_t *humi)   
    84. {        
    85.         uint8_t buf[5],i;
    86.         DHT11_Reset();
    87.         if(DHT11_Check()==0)
    88.         {
    89.                 for(i=0;i<5;i++)
    90.                 {
    91.                         buf[i]=DHT11_Read_Byte();
    92.                 }
    93.                 if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
    94.                 {
    95.                         *humi=buf[0];
    96.                         *temp=buf[2];
    97.                 }
    98.         }
    99.         else return 1;
    100.         return 0;            
    101. }

    102. #endif
    复制代码
        效果:

    4.gif
        在APP上可以看到温度和湿度数据:

    Screenshot_2018-02-24-23-38-58-631_涂鸦智能.png

    回复

    使用道具 举报

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

    关闭

    站长推荐上一条 /3 下一条

    手机版|爱板网

    GMT+8, 2018-9-22 06:17 , Processed in 0.074906 second(s), 13 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-5   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001056号

    Powered by Discuz!

    返回顶部