和12歲小同志搞創(chuàng)客開發(fā):手撕代碼,做一款溫濕度檢測(cè)器
本篇博文將使用DHT11做一款溫濕度檢測(cè)器,檢測(cè)的溫濕度數(shù)據(jù)將通過(guò)LCD1602顯示。
項(xiàng)目連線效果如下所示:
實(shí)現(xiàn)代碼如下所示:
#include#include#includeLiquidCrystal_I2C lcd(0x20,16,2); //設(shè)置LCD的地址為0x20,可以設(shè)置2行,每行16個(gè)字符dht11 DHT;#define DHT11_PIN 4void 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); //光標(biāo)移到第2行,第一個(gè)字符lcd.print("Temp(C): "); //LCD屏顯示”Temp(C):”}void loop(){int chk; //chk用于存儲(chǔ)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);}
首先把用到的庫(kù)聲明一下:
本項(xiàng)目使用到dht11.h和LiquidCrystal_l2C的庫(kù),需要加載庫(kù),那么Wire.h的庫(kù)為什么不需要加載呢?因?yàn)槲覀兿螺d的Arduino IDE本身自帶這個(gè)庫(kù)。
有了現(xiàn)有的庫(kù),所以只需要在程序的一開始聲明一下LCD:
LiquidCrystal_I2C lcd(0x20,16,2); //設(shè)置LCD的地址為0x20,可以設(shè)置2行,每行16個(gè)字符其中:
0X20:是LCD I2C地址,由屏后面的A0~A1決定,可參見產(chǎn)品手冊(cè);
16:每行16個(gè)字符;
2:共2行。
程序中LiquidCrystal_I2C.h設(shè)計(jì)函數(shù)說(shuō)明如下表所示:
“switch”可以理解為是“開關(guān)”,多選擇開關(guān)。與if語(yǔ)句相似之處在于switch…case也用于判斷,又與if不同點(diǎn)在于它能判斷多種情況。使用如下所示:
需要注意幾點(diǎn):
1、case后面是冒號(hào),不是分號(hào)。
2、關(guān)鍵字break用于退出switch語(yǔ)句,通常每條case語(yǔ)句都以break結(jié)尾。如果沒(méi)有break語(yǔ)句,switch語(yǔ)句將會(huì)一直執(zhí)行接下來(lái)的語(yǔ)句(一直向下)直到遇見一個(gè)break,或者switch語(yǔ)句結(jié)尾。
最后,下載運(yùn)行程序看看效果吧~
往期推薦
評(píng)論
圖片
表情

