查看: 9311|回复: 8

DHT11+LCD1602

[复制链接]
  • TA的每日心情
    开心
    2014-12-13 09:15
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2014-12-13 09:08 | 显示全部楼层 |阅读模式
    /*  LiquidCrystal Library - DHT11
    Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
    library works with all LCD displays that are compatible with the
    Hitachi HD44780 driver. There are many of them out there, and you
    can usually tell them by the 16-pin interface.
      The circuit:
    * LCD RS pin to digital pin 12
    * LCD Enable pin to digital pin 10
    * LCD D4 pin to digital pin 5
    * LCD D5 pin to digital pin 4
    * LCD D6 pin to digital pin 3
    * LCD D7 pin to digital pin 2
    * LCD R/W pin to ground
    * LCD VSS pin to ground
    * LCD VCC pin to 5V
    * 10K resistor: ends to +5V and ground,wiper to LCD VO pin (pin 3)
    */
    // include the library code:
    #include <LiquidCrystal.h>
    byte smiley[8] = {
      B00111,
      B00101,
      B00111,
      B00000,
      B00000,
      B00000,
      B00000,
    };
    // initialize the library with the numbers of the interface pins
    LiquidCrystal lcd(12, 10, 5, 4, 3, 2);
    int temp;//温度
    int humi;//湿度
    int tol;//校对码
    int j;
    unsigned int loopCnt;
    int chr[40] = {0};//创建数字数组,用来存放40个bit
    unsigned long time;
    #define pin 11   //DHT11 连接arduino11引脚
    void setup() {   Serial.begin(9600);
      lcd.begin(16, 2); // set up the LCD's number of columns and rows:
      lcd.print("Temp      Humi");  // Print a message to the LCD.
      lcd.createChar(0, smiley);
    }
    void loop() {
      bgn:  delay(2000);
      pinMode(pin,OUTPUT);//设置11号接口模式为:输出
      digitalWrite(pin,LOW);//输出低电平20ms(>18ms)
      delay(20);
      digitalWrite(pin,HIGH);//输出高电平40μs
      delayMicroseconds(40);
      digitalWrite(pin,LOW);
      pinMode(pin,INPUT);//设置11号接口模式:输入
      //高电平响应信号
      loopCnt=10000;
      while(digitalRead(pin) != HIGH)
      { if(loopCnt-- == 0)
        {Serial.println("HIGH");//如果长时间不返回高电平,输出个提示,重头开始。
          goto bgn;    }
      }
      //低电平响应信号
      loopCnt=30000;
      while(digitalRead(pin) != LOW)
      {if(loopCnt-- == 0)
       {Serial.println("LOW");//如果长时间不返回低电平,输出个提示,重头开始。
          goto bgn;    }
      }
    //开始读取bit1-40的数值  
        for(int i=0;i<40;i++)
      { while(digitalRead(pin) == LOW)
        {}
    //当出现高电平时,记下时间“time”
        time = micros();
        while(digitalRead(pin) == HIGH)
        {}
    //当出现低电平,记下时间,再减去刚才储存的time
    //得出的值若大于50μs,则为‘1’,否则为‘0’
    //并储存到数组里去
        if (micros() - time >50)
        { chr[i]=1; }
        else{ chr[i]=0; }
      }
    //湿度,8位的bit,转换为数值
    humi=chr[0]*128+chr[1]*64+chr[2]*32+chr[3]*16+chr[4]*8+chr[5]*4+chr[6]*2+chr[7];
    //温度,8位的bit,转换为数值
    temp=chr[16]*128+chr[17]*64+chr[18]*32+chr[19]*16+chr[20]*8+chr[21]*4+chr[22]*2+chr[23];
      //校对码,8位的bit,转换为数值
    tol=chr[32]*128+chr[33]*64+chr[34]*32+chr[35]*16+chr[36]*8+chr[37]*4+chr[38]*2+chr[39];
    //输出:温度、湿度、校对码
    lcd.setCursor(0, 1); // set the cursor to column 0, line 1
    lcd.print(temp);
    lcd.setCursor(2, 1);
    lcd.write(byte(0));
    lcd.setCursor(3, 1);
    lcd.print("C");
      lcd.setCursor(10, 1); // set the cursor to column 10, line 1
      lcd.print(humi);
      lcd.setCursor(12, 1);
      lcd.print("%");
      Serial.print("temp:");
      Serial.print(temp);
      Serial.print(" Celsius,         ");
      Serial.print("humi:");
      Serial.print(humi);
      Serial.println("%");
    //  Serial.print("tol:");
    //  Serial.println(tol);
    //校对码,我这里没用上,理论上,湿度+温度=校对码,如果数值不相等,说明读取的数据有错。  
    }

    该用户从未签到

    发表于 2016-5-16 21:35 | 显示全部楼层
    太谢谢楼主的程序了,感激不尽

    该用户从未签到

    发表于 2016-5-16 21:36 | 显示全部楼层
    一开始要添加上DTH库函数才可以运行哦,接线方式不难,按程序连接就可以了,加油,你也可以做到的

    该用户从未签到

    发表于 2016-5-16 21:41 | 显示全部楼层
    下载dht11库文件:http://pan.baidu.com/s/1ntv9QA1
    将dht11压缩文件解压复制arduino安装文件夹的libraryies中。

    该用户从未签到

    发表于 2016-7-2 23:30 | 显示全部楼层
    好文 刚好需要
  • TA的每日心情
    开心
    2016-7-3 04:51
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2016-7-3 04:51 来自手机 | 显示全部楼层
    这个不需要dht11的库吧,代码里直接获取dht11的2进制码转换了啊!

    该用户从未签到

    发表于 2019-4-15 17:23 | 显示全部楼层
    为什么我不可以呜呜呜
  • TA的每日心情
    奋斗
    2019-5-24 16:20
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2019-4-17 10:16 | 显示全部楼层
    可以看DHT源码库里的算法,然后自己写自己的库
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    [Arduino物联网开发实战2]数据反馈
    [Arduino物联网开发实战2]
    [md]上一篇:(https://www.arduino.cn/thread-83177-1-1.html) 除了控制设备外,blin
    OLED 128*64自制可达10000000个选项的菜单(已更新)
    OLED 128*64自制可达10000
    OLED 128*64自制可达10000000个选项的菜单 温馨提示: 建议占个楼再食用本帖子
    新手求帮助,别人给的一个工程,打开编译报错
    新手求帮助,别人给的一个
    别人给的一个esp8266的工程,编译时候显示缺失很多.h文件,我从github和管理库里面下
    RPG游戏 无人世界
    RPG游戏 无人世界
    操作:方向键移动,a键确认 b键打开符文菜单 游戏流程大约半小时 视频攻略:ht
    求求求你 救救孩子吧
    求求求你 救救孩子吧
    这个bug是什么问题
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表