本篇博文將使用DHT11做一款溫濕度檢測器浴井,檢測的溫濕度數(shù)據(jù)將通過LCD1602顯示磺浙。
項目連線效果如下所示:
實現(xiàn)代碼如下所示:
#include <dht11.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x20,16,2);? //設(shè)置LCD的地址為0x20撕氧,可以設(shè)置2行伦泥,每行16個字符
dht11 DHT;
#define DHT11_PIN 4
void setup(){
? lcd.init();? ? ? ? ? ? ? ? // LCD初始化設(shè)置
? lcd.backlight();? ? ? ? ? // 打開LCD背光
? Serial.begin(9600);? ? ? // 設(shè)置串口波特率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傳感器的數(shù)據(jù)
? Serial.print("DHT11, \t");? ?
? //讀取DHT11傳感器的數(shù)據(jù)
? 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本身自帶這個庫亿昏。
有了現(xiàn)有的庫档礁,所以只需要在程序的一開始聲明一下LCD:
LiquidCrystal_I2Clcd(0x20,16,2);//設(shè)置LCD的地址為0x20,可以設(shè)置2行事秀,每行16個字符
其中:
0X20:是LCD I2C地址易迹,由屏后面的A0~A1決定睹欲,可參見產(chǎn)品手冊;
16:每行16個字符;
2:共2行窘疮。
程序中LiquidCrystal_I2C.h設(shè)計函數(shù)說明如下表所示:
“switch”可以理解為是“開關(guān)”袋哼,多選擇開關(guān)。與if語句相似之處在于switch…case也用于判斷闸衫,又與if不同點在于它能判斷多種情況涛贯。使用如下所示:
需要注意幾點:
1、case后面是冒號蔚出,不是分號弟翘。
2、關(guān)鍵字break用于退出switch語句骄酗,通常每條case語句都以break結(jié)尾稀余。如果沒有break語句,switch語句將會一直執(zhí)行接下來的語句(一直向下)直到遇見一個break趋翻,或者switch語句結(jié)尾。
最后,下載運行程序看看效果吧~