找回密码
 立即注册

QQ登录

只需一步,快速开始

本帖最后由 lxf 于 2020-8-17 13:33 编辑

第28课 DHT11温湿度传感器的使用


目标

1、DHT11温湿度传感器模块库文件的使用
2、串口打印DHT11温湿度传感器检测到的当前环境温度
3、串口打印DHT11温湿度传感器检测到的当前环境湿度度
4、#define宏定义的使用

实验材料

Arduino UNO开发板
DHT11温湿度传感器模块
配套USB数据线
配套杜邦线若干
Arduino IDE软件

微信图片_20200702151214.png

内容

接线图

图片1.png

接线方式

Arduino UNO     <------>   DHT11温湿度传感器模块
            5V           <------>               +
          GND         <------>                -
            2             <------>             OUT

案例1:串口打印读取DHT11温湿度传感器检测到的当前环境温度

需要使用到DHT11温湿度传感器第三方库文件
提取码:gmv1

下载后安装库文件

文件下载后无需解压,点击Arduino IDE菜单栏项目—加载库—添加.ZIP库...

微信图片_20200702155346.png

程序实现代码

  1. #include <dht11.h>  //DHT11温湿度传感器库文件
  2. dht11 DHT11;
  3. #define DHT11PIN 2   //将宏DHT11PIN定义为2,即将DHT11温湿度传感器定义为2号引脚
  4. void setup(){
  5.   Serial.begin(9600);
  6. }
  7. void loop(){
  8. int x = DHT11.read(DHT11PIN);
  9.   Serial.print("Temperature: ");   //串口打印字符串“Temperature:”
  10.   Serial.println((float)DHT11.temperature, 2);  //打印自动换行DHT11温湿度传感器检测到的当前环境的温度
  11. delay(5000);   //延迟等待5秒
  12. }
复制代码

打开串口监视器查看运行结果:

微信图片_20200702152852.png

案例2:串口打印读取DHT11温湿度传感器检测到的当前环境湿度

程序实现代码

  1. #include <dht11.h>   //DHT11温湿度传感器库文件
  2. dht11 DHT11;
  3. #define DHT11PIN 2   //将宏DHT11PIN定义为2,即将DHT11温湿度传感器定义为2号引脚
  4. void setup(){
  5.   Serial.begin(9600);
  6. }
  7. void loop(){
  8. int x = DHT11.read(DHT11PIN);   
  9.   Serial.print("Humidity: ");    //串口打印字符串“Humidity:”
  10.   Serial.println((float)DHT11.humidity, 2);   //打印自动换行DHT11温湿度传感器检测到的当前环境的湿度
  11. delay(5000);  //延迟等待5秒
  12. }
复制代码

打开串口监视器查看运行结果:

图片5.png

define

#define宏定义
define是C语言中的预处理命令,它用于宏定义,可以提高源代码的可读性并且为编程提供方便。要解释define的用途,首先要了解预处理命令的概念。
所谓预处理是指在进行编译之前所作的工作。预处理是C语言的一个重要功能,它由预处理程序负责完成。当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,预处理完毕后自动进入对源程序的编译。
预处理命令以“#”号开头,如#include(包含命令),#define(宏定义命令)等。预处理命令一般放在源文件的开头部分,也称为预处理部分。
在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。
在C或C++语言中,“宏”分为有参数和无参数两种。

无参数宏定义举例

  1. #define ledPin 13
  2. void setup() {
  3. pinMode(ledPin, OUTPUT);
  4. }
  5. void loop() {
  6. digitalWrite(ledPin, HIGH);   // turn the LED on (HIGH is the voltage level)
  7. delay(1000);   // wait for a second
  8. digitalWrite(ledPin, LOW);   // turn the LED off by making the voltage LOW
  9. delay(1000);   // wait for a second
  10. }
复制代码

第1行语句#define ledPin 13将宏ledPin定义为13
第3行语句pinMode(ledPin, OUTPUT);进行宏调用操作,用13去代替ledPin。经预处理宏展开后的语句为: pinMode(13, OUTPUT);
第6行语句digitalWrite(ledPin, HIGH);进行宏调用操作,用13去代替ledPin。经预处理宏展开后的语句为: digitalWrite(13, HIGH);
第8行语句digitalWrite(ledPin, LOW);进行宏调用操作,用13去代替ledPin。经预处理宏展开后的语句为: digitalWrite(13, LOW);

提示

#define语句的后面没有分号,如果你加了一个分号”;”编译器将会报错。如以下程序:
#define ledPin 3; //本语句使用分号是错误的。
另外在使用define时使用等号也会产生错误。如以下程序:
#define ledPin = 3 //本语句使用等号是错误的

带参数宏定义

C语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。

带参数宏定义举例

  1. #define M(y) y*y+3*y
  2. int k;
  3. void setup() {
  4. k=M(5);
  5. Serial.begin(9600);
  6. }
  7. void loop() {
  8. Serial.println(k);
  9. }
复制代码

第1行语句#define M(y) y*y+3*y将宏M(y)定义为y*y+3*y
第4行语句宏调用时,用实参5去代替形参y,经预处理宏展开后的语句为: k=5*5+3*5
分享至 : QQ空间
收藏

0 个回复

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