和12岁小同志搞创客开发:手撕代码,做一款温湿度检测器
Posted 不脱发的程序猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了和12岁小同志搞创客开发:手撕代码,做一款温湿度检测器相关的知识,希望对你有一定的参考价值。
机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧。
项目专栏:https://blog.csdn.net/m0_38106923/category_11097422.html
本篇博文将使用DHT11做一款温湿度检测器,检测的温湿度数据将通过LCD1602显示。
项目连线效果如下所示:
实现代码如下所示:
#include <dht11.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x20,16,2); //设置LCD的地址为0x20,可以设置2行,每行16个字符
dht11 DHT;
#define DHT11_PIN 4
void setup()
lcd.init(); // LCD初始化设置
lcd.backlight(); // 打开LCD背光
Serial.begin(9600); // 设置串口波特率9600
//串口输出”Type, status, Humidity(%), Temperature(C)”
Serial.println("Type,\\tstatus,\\tHumidity(%),\\tTemperature(C)");
lcd.print("Humidity(%): "); //LCD屏显示” Humidity(%):”
lcd.setCursor(0, 1); //光标移到第2行,第一个字符
lcd.print("Temp(C): "); //LCD屏显示”Temp(C):”
void loop()
int chk; //chk用于存储DHT11传感器的数据
Serial.print("DHT11, \\t");
//读取DHT11传感器的数据
chk = DHT.read(DHT11_PIN);
switch (chk)
case DHTLIB_OK:
Serial.print("OK,\\t");
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.print("Checksum error,\\t");
break;
case DHTLIB_ERROR_TIMEOUT:
Serial.print("Time out error,\\t");
break;
default:
Serial.print("Unknown error,\\t");
break;
//串口显示温湿度值
Serial.print(DHT.humidity,1);
Serial.print(",\\t");
Serial.println(DHT.temperature,1);
//LCD显示温湿度值
lcd.setCursor(12, 0);
lcd.print(DHT.humidity,1);
lcd.setCursor(8, 1);
lcd.print(DHT.temperature,1);
delay(1000);
首先把用到的库声明一下:
#include <dht11.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
本项目使用到dht11.h和LiquidCrystal_l2C的库,需要加载库,那么Wire.h的库为什么不需要加载呢?因为我们下载的Arduino IDE本身自带这个库。
有了现有的库,所以只需要在程序的一开始声明一下LCD:
LiquidCrystal_I2C lcd(0x20,16,2); //设置LCD的地址为0x20,可以设置2行,每行16个字符
其中:
- 0X20:是LCD I2C地址,由屏后面的A0~A1决定,可参见产品手册;
- 16:每行16个字符;
- 2:共2行。
程序中LiquidCrystal_I2C.h设计函数说明如下表所示:
“switch”可以理解为是“开关”,多选择开关。与if语句相似之处在于switch…case也用于判断,又与if不同点在于它能判断多种情况。使用如下所示:
需要注意几点:
1、case后面是冒号,不是分号。
2、关键字break用于退出switch语句,通常每条case语句都以break结尾。如果没有break语句,switch语句将会一直执行接下来的语句(一直向下)直到遇见一个break,或者switch语句结尾。
最后,下载运行程序看看效果吧~
以上是关于和12岁小同志搞创客开发:手撕代码,做一款温湿度检测器的主要内容,如果未能解决你的问题,请参考以下文章