@[TOC](
【Arduino】温湿度传感器(DHT11)控制设计 四位数码管,LCD1602,带蜂鸣器、LED灯报警,串口输入设定阈值
)


一、实验器材

UNO控制板:1块
共阳极四位数码管:1个
面包板:1块
面包板跳线:若干
220Ω电阻:4个
有源蜂鸣器:1个
红色led灯-1
黄色led灯-1
DHT11:1个

二、连线示意图


注意:A4接LCD1602的SDA、A5接LCD1602的SCL

三、代码如下

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <dht11.h>
dht11 dht11;
char signal;
int dhtpin = A3;//DHT11温湿度传感数据读取端口
int buzzerPin = A0;//蜂鸣器端口
int LED1 = A2;
int LED2 = A1;//设置初始温度湿度
int temperatureset=22;
int humidityset=20;
//设置阴极接口
int a = 2;
int b = 3;
int c = 4;
int d = 5;
int e = 6;
int f = 7;
int g = 8;
int p = 9;//设置阳极接口
int d4 = 12;
int d3 = 13;
int d2 = 11;
int d1 = 10;//设置变量float humidity;
float temperature;
int num4;
int num3;
int num2;
int num1;
// I2C地址, 一般为0x3F, 0x20或0x27
LiquidCrystal_I2C lcd(0x27,16,2);void setup(){
lcd.init();
lcd.backlight(); // 打开背光Serial.begin(9600);pinMode(d1, OUTPUT);pinMode(d2, OUTPUT);pinMode(d3, OUTPUT);pinMode(d4, OUTPUT);pinMode(a, OUTPUT);pinMode(b, OUTPUT);pinMode(c, OUTPUT);pinMode(d, OUTPUT);pinMode(e, OUTPUT);pinMode(f, OUTPUT);pinMode(g, OUTPUT);pinMode(p, OUTPUT);pinMode(buzzerPin,OUTPUT);pinMode(LED1,OUTPUT);//设置led引脚为输出引脚pinMode(LED2,OUTPUT);//设置led引脚为输出引脚lcd.setCursor(0,1); // line 1, pos 0lcd.print("H:     % T:");delay(1000);
}void pickDigit(int x)  //定义pickDigit(x),其作用是开启dx端口
{digitalWrite(d1, LOW);digitalWrite(d2, LOW);digitalWrite(d3, LOW);digitalWrite(d4, LOW);switch(x){case 1:digitalWrite(d1, HIGH);break;case 2:digitalWrite(d2, HIGH);break;case 3:digitalWrite(d3, HIGH);break;default:digitalWrite(d4, HIGH);break;}
}void dispDec(int x)  //设定开启小数点
{digitalWrite(p, LOW);
}void clearLEDs()  //清屏
{digitalWrite(a, HIGH);digitalWrite(b, HIGH);digitalWrite(c, HIGH);digitalWrite(d, HIGH);digitalWrite(e, HIGH);digitalWrite(f, HIGH);digitalWrite(g, HIGH);digitalWrite(p, HIGH);
}void Num_0()  //定义数字0时阴极那些管脚开关
{digitalWrite(a, LOW);digitalWrite(b, LOW);digitalWrite(c, LOW);digitalWrite(d, LOW);digitalWrite(e, LOW);digitalWrite(f, LOW);digitalWrite(g, HIGH);
}void Num_1()  //定义数字1时阴极那些管脚开关
{digitalWrite(a, HIGH);digitalWrite(b, LOW);digitalWrite(c, LOW);digitalWrite(d, HIGH);digitalWrite(e, HIGH);digitalWrite(f, HIGH);digitalWrite(g, HIGH);
}void Num_2()  //定义数字2时阴极那些管脚开关
{digitalWrite(a, LOW);digitalWrite(b, LOW);digitalWrite(c, HIGH);digitalWrite(d, LOW);digitalWrite(e, LOW);digitalWrite(f, HIGH);digitalWrite(g, LOW);
}void Num_3()  //定义数字3时阴极那些管脚开关
{digitalWrite(a, LOW);digitalWrite(b, LOW);digitalWrite(c, LOW);digitalWrite(d, LOW);digitalWrite(e, HIGH);digitalWrite(f, HIGH);digitalWrite(g, LOW);
}void Num_4()  //定义数字4时阴极那些管脚开关
{digitalWrite(a, HIGH);digitalWrite(b, LOW);digitalWrite(c, LOW);digitalWrite(d, HIGH);digitalWrite(e, HIGH);digitalWrite(f, LOW);digitalWrite(g, LOW);
}void Num_5()  //定义数字5时阴极那些管脚开关
{digitalWrite(a, LOW);digitalWrite(b, HIGH);digitalWrite(c, LOW);digitalWrite(d, LOW);digitalWrite(e, HIGH);digitalWrite(f, LOW);digitalWrite(g, LOW);
}void Num_6()  //定义数字6时阴极那些管脚开关
{digitalWrite(a, LOW);digitalWrite(b, HIGH);digitalWrite(c, LOW);digitalWrite(d, LOW);digitalWrite(e, LOW);digitalWrite(f, LOW);digitalWrite(g, LOW);
}void Num_7()  //定义数字7时阴极那些管脚开关
{digitalWrite(a, LOW);digitalWrite(b, LOW);digitalWrite(c, LOW);digitalWrite(d, HIGH);digitalWrite(e, HIGH);digitalWrite(f, HIGH);digitalWrite(g, HIGH);
}void Num_8() //定义数字8时阴极那些管脚开关
{digitalWrite(a, LOW);digitalWrite(b, LOW);digitalWrite(c, LOW);digitalWrite(d, LOW);digitalWrite(e, LOW);digitalWrite(f, LOW);digitalWrite(g, LOW);
}void Num_9()  //定义数字9时阴极那些管脚开关
{digitalWrite(a, LOW);digitalWrite(b, LOW);digitalWrite(c, LOW);digitalWrite(d, LOW);digitalWrite(e, HIGH);digitalWrite(f, LOW);digitalWrite(g, LOW);
}
void dispose(int show){num4=show%10;show=show/10;num3=show%10;show=show/10;num2=show%10;show=show/10;num1=show%10;
}
void pickNumber(int n)   //定义pickNumber(x),其作用是显示数字n
{switch(n){default:case 0:Num_0();break;case 1:Num_1();break;case 2:Num_2();break;case 3:Num_3();break;case 4:Num_4();break;case 5:Num_5();break;case 6:Num_6();break;case 7:Num_7();break;case 8:Num_8();break;case 9:Num_9();break;}
}
void tone1(){for(int i=0;i<100;i++){digitalWrite(buzzerPin,HIGH);delay(1);digitalWrite(buzzerPin,LOW);delay(3);}
}
void tone2(){for(int i=0;i<100;i++){digitalWrite(buzzerPin,HIGH);delay(6);digitalWrite(buzzerPin,LOW);delay(8);}
}
String inString="";
void loop()
{Serial.println("请输入字符'H'或'T'分别修改湿度和温度阈值:");if(Serial.available()>0){Serial.print("输入字符:");char signal=Serial.read();Serial.println(signal);delay(5000);if(signal=='H'){//修改湿度阈值if(Serial.available()>0){       int i = Serial.parseInt();  Serial.print("修改湿度阈值:");Serial.println(i);humidityset=i;}}if(signal=='T'){//修改温度阈值if(Serial.available()>0){int i = Serial.parseInt();  Serial.print("修改温度阈值:");Serial.println(i);temperatureset=i;}}}dht11.read(dhtpin);  // 读取 DHT11 传感器// 读取温度或湿度humidity=dht11.humidity;temperature=dht11.temperature;int show=humidity*100;dispose(show);clearLEDs();Serial.print("当前湿度:");Serial.print(humidity);Serial.println(" %\t");for(int k=2000;k>0;k--){clearLEDs();pickDigit(1);pickNumber(num1);clearLEDs();pickDigit(2);dispDec(2);pickNumber(num2);clearLEDs();pickDigit(3);pickNumber(num3);clearLEDs();pickDigit(4);pickNumber(num4); }     Serial.print("当前温度:");Serial.print(temperature);Serial.println(" °C ");show=temperature*100;clearLEDs();dispose(show);for(int k=2000;k>0;k--){clearLEDs();pickDigit(1);pickNumber(num1);clearLEDs();pickDigit(2);dispDec(2);pickNumber(num2);clearLEDs();pickDigit(3);pickNumber(num3);clearLEDs();pickDigit(4);pickNumber(num4); }      clearLEDs();if(temperature>temperatureset){digitalWrite(LED1,HIGH);tone1();Serial.println("温度超标,黄色报警灯亮");   //黄灯亮}else{digitalWrite(LED1,LOW);}if(humidity>humidityset){                //红灯亮digitalWrite(LED2,HIGH);tone2();Serial.println("湿度超标,红色报警灯亮");  }else{digitalWrite(LED2,LOW);}lcd.setCursor(0,0);lcd.print("S-H:  %");lcd.setCursor(4,0);lcd.print(humidityset);lcd.setCursor(8,0);lcd.print("S-T:  'C");lcd.setCursor(12,0);lcd.print(temperatureset);lcd.setCursor(2,1); // line 1, pos 0lcd.print(humidity);lcd.setCursor(11,1); // line 1, pos 0lcd.print(temperature);
//  delay(2000);
//移动
//      for (int positionCounter = 0; positionCounter < 13; positionCounter++)
//      {
//        lcd.scrollDisplayLeft();
//        delay(1000);
//      }
//      for (int positionCounter = 0; positionCounter < 29; positionCounter++)
//      {
//        lcd.scrollDisplayRight();
//        delay(1000);
//      }
//      for (int positionCounter = 0; positionCounter < 16; positionCounter++)
//      {
//        lcd.scrollDisplayLeft();
//        delay(1000);
//      }
//      //  下次移动的延迟
//      delay(10);
}

2.实物展示如下:

4月21日

参考链接
https://blog.csdn.net/qq_52201194/article/details/123685337?spm=1001.2014.3001.5501

【Arduino】温湿度传感器(DHT11)控制设计 四位数码管,LCD1602,带蜂鸣器、LED灯报警,串口输入设定阈值相关推荐

  1. 【Arduino】交通灯控制设计 四位数码管

    实验现象 在Arduino开发板上设计红黄绿Led灯定时循环同步数码管显示,以数码管时间显示进行定时循环控制,要求红绿灯定时15秒,黄灯定时5秒.并在此基础之上设计串口通信键盘输入变量进行红黄绿LED ...

  2. 有关温湿度传感器DHT11的C语言编程,数字温湿度传感器DHT11 操作C语言源代码

    1.数字温湿度传感器DHT11 操作C语言源代码 2.带校验 3.带读操作超时处理 //IO定义 #defineP_DataIN_DHT11PB0_IN #defineP_DataOUT_DHT11P ...

  3. Arduino基础入门之十三 温湿度传感器DHT11

    一 硬件 DHT11这款温湿度传感器,精度湿度±5%RH, 温度±2℃,如下图所示[1] 4个引脚接线一目了然,2号data用于传感器与微控制器之间的通信,接UNO的某数字引脚,3号NC空置即可.目前 ...

  4. 湿度检测仪输入示数计算机编程,温湿度传感器DHT11驱动程序 - 全文

    温湿度传感器DHT11驱动程序 - 全文 来源:网络整理 作者:2018年01月22日 16:52 [导读] 本文开始介绍了驱动程序的定义与驱动程序的作用,其次介绍了DHT11温湿度传感器特性.引脚说 ...

  5. arduino温湿度传感器

    这是个arduino温湿度传感器程序,当温度大于30度,则开启继电器连接的风扇. 代码: #include <DHT.h> #include <Servo.h> #define ...

  6. STM32应用(八)数字温度传感器DS18B20、数字温湿度传感器DHT11(软件模拟I2C)

    文章目录 1.DS18B20 数字温度传感器实验 1.1 DS18B20简介 1.2 硬件与IO口配置 1.3 实物图与接线 1.4 工程配置 1.5 驱动和检测代码编写 1.5.1 ds18b20. ...

  7. zigbee CC2530 系列教程 15 温湿度传感器DHT11实验

    所有课程见此链接: zigbee CC2530 系列教程 0 课程介绍 4.12温湿度传感器DHT11实验 4.12.1 实验目的 学习使用温湿度传感器DHT11,并在串口显示温湿度数据. 4.12. ...

  8. 【FPGA】Verilog代码实现温湿度传感器DHT11

    #今天也是咸鱼的一天~ 因为参加Robei 杯 是要做一个机器人,先不说这个机器人具体怎么机器法,但是和外界互通的传感器肯定少不了,通过获取外界环境数据,进行处理,然后做出各种各样的功能. 先来讲个简 ...

  9. 温湿度传感器DHT11介绍

    温湿度传感器DHT11简介 DHT11数字温湿度传感器是一种出厂时经过校准的数字信号输出的温湿度数字温湿度传感器.DHT11数字温湿度传感器应用温湿度传感技术和数字采集技术,确保其具有极高的可靠性和卓 ...

最新文章

  1. vue-cli 打包
  2. vs azure web_在Azure中迁移和自动化Chrome Web爬网程序的指南。
  3. python爬取网页版QQ空间,生成词云图、柱状图、折线图(附源码)
  4. 这些年我用过的编程语言
  5. js打印到控制台_如何实现可复用的控制台“艺术字”打印功能
  6. sas最新sid及安装方法
  7. Jmeter安装及使用教程
  8. opencv svm 多分类问题
  9. python爬取微信运动_用 Python 修改微信(支付宝)运动步数,轻松 TOP1
  10. 深度森林:常见Warning及解决方案
  11. 分享一个好用的图吧电脑工具
  12. 9:参数校验-Java Spring
  13. 【java实现定时自动发送QQ消息】
  14. 旅行青蛙游戏背后所存在的情感。
  15. 理解ZBrush中的笔触
  16. One-Error多标签分类_多分类及多标签分类算法
  17. js从字符串中提取身份证号,连续18位数字
  18. 分布式闭锁-redisson的闭锁应用
  19. 手撕系列-AdaBoost
  20. 【Qt】之一些值得关注的博主

热门文章

  1. 使用数组方式代替switch增强代码可读性
  2. 计算机毕设项目分享-ssm框架实现bbs论坛系统
  3. Spring系列:IOC依赖的三个方向来源
  4. Wayback Machine – 带你穿越互联网,找回消失的网页
  5. 连续污染源的四维模拟程序
  6. 重金属污染源matlab代码,2011重金属污染源的数学建模.docx
  7. 微博前端面试(Zxw记录问题,自己总结)
  8. mkv电影如何无损转换为swf格式
  9. 简单词法分析器的实现
  10. ListView滑动删除 ,仿腾讯QQ