找回密码
 立即注册

QQ登录

只需一步,快速开始

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

DHT11温湿度arduino程序

[复制链接]
跳转到指定楼层
楼主
DHT11温湿度检测程序

arduino单片机源程序如下:
  1. #include "dht.h"  
  2.   
  3. #define TIMEOUT 10000  
  4. #define pin     D2
  5. // return values:  
  6. //  0 : OK  
  7. // -1 : checksum error  
  8. // -2 : timeout  
  9. int dht::read11()  
  10. {  
  11.     // READ VALUES  
  12.    int rv = read();  
  13.     if (rv != 0) return rv;  

  14.     // CONVERT AND STORE  
  15.     humidity    = bits[0];  // bit[1] == 0;  
  16.     temperature = bits[2];  // bits[3] == 0;  
  17.   
  18.     // TEST CHECKSUM  
  19.    uint8_t sum = bits[0] + bits[2]; // bits[1] && bits[3] both 0  
  20.     if (bits[4] != sum) return -1;  

  21.     return 0;  
  22. }  

  23. // return values:  
  24. //  0 : OK  
  25. // -1 : checksum error  
  26. // -2 : timeout  
  27. int dht::read22()  
  28. {  
  29.     // READ VALUES  
  30.     int rv = read();  
  31.     if (rv != 0) return rv;  
  32.   
  33.     // CONVERT AND STORE  
  34.     humidity    = word(bits[0], bits[1]) * 0.1;  
  35.   
  36.     int sign = 1;  
  37.     if (bits[2] & 0x80) // negative temperature  
  38.     {  
  39.         bits[2] = bits[2] & 0x7F;  
  40.         sign = -1;  
  41.     }  
  42.     temperature = sign * word(bits[2], bits[3]) * 0.1;  
  43.   
  44.   // TEST CHECKSUM  
  45.     uint8_t sum = bits[0] + bits[1] + bits[2] + bits[3];  
  46.     if (bits[4] != sum) return -1;  

  47.     return 0;  
  48. }  

  49. // return values:  
  50. //  0 : OK  
  51. // -2 : timeout  
  52. int dht::read()  
  53. {  
  54.     // INIT BUFFERVAR TO RECEIVE DATA  
  55.     uint8_t cnt = 7;  
  56.     uint8_t idx = 0;  

  57.    // EMPTY BUFFER  
  58.    for (int i=0; i< 5; i++) bits[i] = 0;  
  59.   
  60.     // REQUEST SAMPLE  
  61.    pinMode(pin, OUTPUT);  
  62.    digitalWrite(pin, LOW);  
  63.    delay(20);  
  64.    digitalWrite(pin, HIGH);  
  65.    delayMicroseconds(40);  
  66.    pinMode(pin, INPUT);  
  67.   
  68.    // GET ACKNOWLEDGE or TIMEOUT  
  69.    unsigned int loopCnt = TIMEOUT;  
  70.    while(digitalRead(pin) == LOW)  
  71.       if (loopCnt-- == 0) return -2;  
  72.   
  73.     loopCnt = TIMEOUT;  
  74.     while(digitalRead(pin) == HIGH)  
  75.        if (loopCnt-- == 0) return -2;  
  76.   
  77.     // READ THE OUTPUT - 40 BITS => 5 BYTES  
  78.     for (int i=0; i<40; i++)  
  79.     {  
  80.         loopCnt = TIMEOUT;  
  81.         while(digitalRead(pin) == LOW)  
  82.             if (loopCnt-- == 0) return -2;  
  83.         unsigned long t = micros();  
  84.   
  85.         loopCnt = TIMEOUT;  
  86.         while(digitalRead(pin) == HIGH)  
  87. ……………………

  88. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
temperature.rar (1.77 KB, 下载次数: 22)


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

使用道具 举报

沙发
ID:234938 发表于 2018-4-12 15:41 | 只看该作者
看起来挺高大上的,过来学习一下。
回复

使用道具 举报

板凳
ID:315637 发表于 2018-4-24 20:00 | 只看该作者
楼主能不能单独发一份???thanks。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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