本帖最后由 lxf 于 2020-8-17 13:33 编辑
目标
1、DHT11温湿度传感器模块库文件的使用 2、串口打印DHT11温湿度传感器检测到的当前环境温度 3、串口打印DHT11温湿度传感器检测到的当前环境湿度度 4、#define宏定义的使用
实验材料
Arduino UNO开发板 DHT11温湿度传感器模块 配套USB数据线 配套杜邦线若干 Arduino IDE软件
内容
接线图
接线方式
Arduino UNO <------> DHT11温湿度传感器模块 5V <------> + GND <------> - 2 <------> OUT
案例1:串口打印读取DHT11温湿度传感器检测到的当前环境温度
需要使用到DHT11温湿度传感器第三方库文件 下载后安装库文件
文件下载后无需解压,点击Arduino IDE菜单栏项目—加载库—添加.ZIP库...
程序实现代码
- #include <dht11.h> //DHT11温湿度传感器库文件
- dht11 DHT11;
- #define DHT11PIN 2 //将宏DHT11PIN定义为2,即将DHT11温湿度传感器定义为2号引脚
- void setup(){
- Serial.begin(9600);
- }
- void loop(){
- int x = DHT11.read(DHT11PIN);
- Serial.print("Temperature: "); //串口打印字符串“Temperature:”
- Serial.println((float)DHT11.temperature, 2); //打印自动换行DHT11温湿度传感器检测到的当前环境的温度
- delay(5000); //延迟等待5秒
- }
复制代码
打开串口监视器查看运行结果:
案例2:串口打印读取DHT11温湿度传感器检测到的当前环境湿度
程序实现代码
- #include <dht11.h> //DHT11温湿度传感器库文件
- dht11 DHT11;
- #define DHT11PIN 2 //将宏DHT11PIN定义为2,即将DHT11温湿度传感器定义为2号引脚
- void setup(){
- Serial.begin(9600);
- }
- void loop(){
- int x = DHT11.read(DHT11PIN);
- Serial.print("Humidity: "); //串口打印字符串“Humidity:”
- Serial.println((float)DHT11.humidity, 2); //打印自动换行DHT11温湿度传感器检测到的当前环境的湿度
- delay(5000); //延迟等待5秒
- }
复制代码
打开串口监视器查看运行结果:
define
#define宏定义 define是C语言中的预处理命令,它用于宏定义,可以提高源代码的可读性并且为编程提供方便。要解释define的用途,首先要了解预处理命令的概念。 所谓预处理是指在进行编译之前所作的工作。预处理是C语言的一个重要功能,它由预处理程序负责完成。当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,预处理完毕后自动进入对源程序的编译。 预处理命令以“#”号开头,如#include(包含命令),#define(宏定义命令)等。预处理命令一般放在源文件的开头部分,也称为预处理部分。 在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。 在C或C++语言中,“宏”分为有参数和无参数两种。
无参数宏定义举例
- #define ledPin 13
- void setup() {
- pinMode(ledPin, OUTPUT);
- }
- void loop() {
- digitalWrite(ledPin, HIGH); // turn the LED on (HIGH is the voltage level)
- delay(1000); // wait for a second
- digitalWrite(ledPin, LOW); // turn the LED off by making the voltage LOW
- delay(1000); // wait for a second
- }
复制代码
第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语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。
带参数宏定义举例
- #define M(y) y*y+3*y
- int k;
- void setup() {
- k=M(5);
- Serial.begin(9600);
- }
- void loop() {
- Serial.println(k);
- }
复制代码
第1行语句#define M(y) y*y+3*y将宏M(y)定义为y*y+3*y 第4行语句宏调用时,用实参5去代替形参y,经预处理宏展开后的语句为: k=5*5+3*5 |