查看: 8574|回复: 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-4-22 09:25
  • 签到天数: 6 天

    [LV.2]偶尔看看I

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

    本版积分规则

    热门推荐

    arduino温湿度串口监视器显示问题
    arduino温湿度串口监视器
    本人刚学arduino,遇到一些技术问题,希望大佬们帮我看一下程序,具体就是温湿度开始
    全过程展示:PWM自定义、测速、PID调速、PID自整定
    全过程展示:PWM自定义、
    有一天,电控小白在某宝上买来了一块Arduino Mega2560、一款直流电机。小白想:“这款
    关于数据同步遇到的问题
    关于数据同步遇到的问题
    首先,下载了DHT-sensor-library-master.zip 并解压到libraries文件夹中(图1) 其次
    blinker设备连接一会后自动断开
    blinker设备连接一会后自
    [mw_shl_code=arduino,true]#define BLINKER_WIFI #define BLINKER_PRINT Serial #
    学生智能打卡系统(接入blinker)
    学生智能打卡系统(接入bl
    【项目名称】学生智能打卡系统(接入blinker) 一.感谢各位大佬 首先感谢社区的管理员
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表