Arduino從DHT11讀取溫濕度數據并顯示在1602LCD

硬件清單

Arduino NANO
1602LCD + PCF8574T模塊
YL-47 DHT11模塊

連線

1. 連接LCD: PCF8574T模塊4pin(Gnd, Vcc, SDA i2c數據, SCL i2c時鐘) 連接至Arduino接口 Gnd -> Gnd, Vcc -> Vcc, SDA -> A4, SDL -> A5
2. 連接YL-47 DHT11: Gnd -> Gnd, Vcc -> Vcc, Data-> D4

Library

除了1602需要的庫以外, 需要安裝兩個自帶的庫:? DHT Sensor Library by Adafruit, Adafruit Unified Sensor

測試代碼

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>#define DHTPIN 4
#define DHTTYPE DHT11// I2C地址, 一般為0x3F, 0x20或0x27
LiquidCrystal_I2C lcd(0x27,16,2);
// 初始化DHT
DHT dht(DHTPIN, DHTTYPE);void setup() {lcd.init();lcd.backlight(); // 打開背光Serial.begin(9600);dht.begin();lcd.setCursor(0,0); // line 0, pos 0lcd.print("Good Day!");lcd.setCursor(0,1); // line 1, pos 0lcd.print("H:     % T:");delay(1000);
}void loop() {// Reading temperature or humidity takes about 250 milliseconds!// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)float h = dht.readHumidity();// Read temperature as Celsius (the default)float t = dht.readTemperature();// Read temperature as Fahrenheit (isFahrenheit = true)float f = dht.readTemperature(true);// Check if any reads failed and exit early (to try again).if (isnan(h) || isnan(t) || isnan(f)) {Serial.println("Failed to read from DHT sensor!");return;}// Compute heat index in Fahrenheit (the default)float hif = dht.computeHeatIndex(f, h);// Compute heat index in Celsius (isFahreheit = false)float hic = dht.computeHeatIndex(t, h, false);Serial.print("Humidity: ");Serial.print(h);Serial.print(" %\t");Serial.print("Temperature: ");Serial.print(t);Serial.print(" *C ");Serial.print(f);Serial.print(" *F\t");Serial.print("Heat index: ");Serial.print(hic);Serial.print(" *C ");Serial.print(hif);Serial.println(" *F");lcd.setCursor(2,1); // line 1, pos 0
  lcd.print(h);lcd.setCursor(11,1); // line 1, pos 0
  lcd.print(t);delay(1000);
}

?

代碼說明

1. DHT11啟動到讀取數據需要等待1~2秒
2. 溫濕度的精度都為1, 沒有小數部分
3. DHT庫里面帶了計算熱指數的方法 computeHeatIndex(), 用于生成綜合溫濕度計算得到的熱指數值

改進拼接字符串

改進后的代碼, 注意: arduino里的sprintf只能格式化整數, 不能格式化浮點

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <DS3231.h>#define DHTPIN 4
#define DHTTYPE DHT11// I2C地址, 一般為0x3F, 0x20或0x27
LiquidCrystal_I2C lcd(0x27,16,2);
DHT dht(DHTPIN, DHTTYPE);
DS3231 Clock;
bool century=false;
bool h12;
bool PM;void setup() {lcd.init();//lcd.backlight(); // 打開背光Serial.begin(9600);dht.begin();lcd.setCursor(0,0); // line 0, pos 0lcd.print("Good Day Jessie~~");lcd.setCursor(0,1); // line 1, pos 0lcd.print("H:  % T:   T:");delay(1000);
}void loop() {char str[17];sprintf(str,"%02d-%02d %02d:%02d:%02d  ",Clock.getMonth(century),Clock.getDate(),Clock.getHour(h12, PM),Clock.getMinute(),Clock.getSecond());lcd.setCursor(0,0); // line 0, pos 0
  lcd.print(str);// Reading temperature or humidity takes about 250 milliseconds!// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)float h = dht.readHumidity();// Read temperature as Celsius (the default)float t = dht.readTemperature();// Read temperature as Fahrenheit (isFahrenheit = true)float f = dht.readTemperature(true);// Check if any reads failed and exit early (to try again).if (isnan(h) || isnan(t) || isnan(f)) {Serial.println("Failed to read from DHT sensor!");return;}// Compute heat index in Fahrenheit (the default)float hif = dht.computeHeatIndex(f, h);// Compute heat index in Celsius (isFahreheit = false)float hic = dht.computeHeatIndex(t, h, false);Serial.print("Humidity: ");Serial.print(h);Serial.print(" %\t");Serial.print("Temperature: ");Serial.print(t);Serial.print(" *C ");Serial.print(f);Serial.print(" *F\t");Serial.print("Heat index: ");Serial.print(hic);Serial.print(" *C ");Serial.print(hif);Serial.println(" *F");lcd.setCursor(2,1); // line 1, pos 0lcd.print((int)h);lcd.setCursor(8,1); // line 1, pos 0lcd.print((int)t);lcd.setCursor(13,1);lcd.print((int)(Clock.getTemperature()*10));delay(1000);
}

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255077.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255077.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255077.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

服務器性能測試

淺談服務器性能測試的全生命周期——從測試、結果分析到優化策略 原創 2016-06-16 Micheal 騰訊WeTest測試開發者的共同關注&#xff01;作者&#xff1a;Micheal&#xff0c;騰訊資深后臺開發工程師。WeTest導讀 服務器性能測試是一項非常重要而且必要的工作&#xff0c;本文是…

庖丁解牛TLD(二)——初始化工作(為算法的準備)

我說的初始化&#xff0c;還不是算法的初始化工作&#xff0c;而是讀入圖像&#xff0c;響應鍵盤鼠標之類的工作。作者提供的代碼中的工作包含了從攝像頭讀取和從文件中讀取兩種輸入方案。這里介紹一下從文件輸入的辦法。因為OpenCV從視頻讀取圖像序列的辦法有很好的demo&#…

(轉載)Qt中MOC的一些限制

無意中發現在Qt的文檔里有一篇關于moc工具的limitation的文章&#xff0c;里頭的東西值得學習一下。 Qt一個鏈接的錯誤&#xff0c; 程序結構很簡單&#xff0c; 就是designer設計主界面&#xff0c;在代碼里用多重繼承方式使用&#xff0c; 奇怪的錯誤信息如下&#xff1a; mo…

庖丁解牛TLD(三)——算法初始化

上一講我提到對于算法的初始化工作主要是在tldInit這個函數里實現的。主要分為如下幾大步驟&#xff0c;1&#xff09;初始化Detector。2&#xff09;初始化Trajectory。3&#xff09;訓練Detector 1)初始化Detector 其中bb_scan為掃描grid區域&#xff0c;該函數輸入為boundin…

Web測試容易忽略的地方

1.瀏覽器的后退按鈕 提交表單一條已經成功提交的記錄&#xff0c;back后再提交&#xff0c;看系統會如何處理。檢查多次使用back健的情況在有back的地方&#xff0c;back&#xff0c;回到原來的頁面&#xff0c;再back&#xff0c;重復幾次&#xff0c;看是否會報錯。 2.通過修…

[Android]你不知道的Android進程化(4)--進程通信AIDL框架

大家好&#xff0c;我系蒼王。以下是我這個系列的相關文章&#xff0c;有興趣可以參考一下&#xff0c;可以給個喜歡或者關注我的文章。[Android]如何做一個崩潰率少于千分之三噶應用app--章節列表Google爸爸&#xff0c;聽說要將一些插件化hook系統的變量屬性禁用&#xff0c;…

在未啟動程序情況 點擊視圖設計器 彈出未將對象引用窗體的解決方案

請問下 在未運行程序情況 點擊視圖設計器 彈出未將對象引用窗體 解決方案&#xff1a;1.看后臺進程是不是相關的進程在啟動&#xff0c;如果有關閉進程&#xff1b;重啟vs,即可2.重啟電腦轉載于:https://www.cnblogs.com/yang12311/p/5593838.html

圖像配準的步驟

目前&#xff0c;很難找到一種普適的方法能夠應對所有的配準情況&#xff0c;任何一種配準算法都必須考慮圖像的成像原理、幾何變形、噪聲影響、配準精度等因素。不過&#xff0c;從原理上將&#xff0c;配準算法可以大致分為以下四個步驟&#xff1a; &#xff08;1&#xff0…

Jm86中的encode_one_macroblock注釋

Jm86中的encode_one_macroblock注釋 /*! ************************************************************************************** /brief* Mode Decision for a macroblock* //該函數的作用是編碼一個宏塊&#xff08;包括幀間、幀內、幀內預測的方式&#xff09;。*…

Python之路【第十七篇】:裝飾器

寫代碼的時候有一個原則&#xff0c;開放封閉原則(面向對象)&#xff1a;對某些東西開放&#xff0c;對某些封閉&#xff0c;在裝飾器這里&#xff0c;函數內部是封閉的&#xff0c;不允許改變函數的內部。 裝飾器用來裝飾函數&#xff0c;可以讓函數在執行之前或者執行之后&am…

HALCON示例程序measure_chip.hdev芯片封裝檢測

HALCON示例程序measure_chip.hdev芯片封裝檢測 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_update_off () read_image (Image, ‘die_on_chip’) get_image_size (Image, Width, Height) dev_close_window () dev_open_window (0, 0, Width * 2, He…

工業機器人智能發展:視覺和觸覺感應簡化

機器人工業協會&#xff08;Robotic Industries Association&#xff09;指出&#xff0c;從2003到2005年間&#xff0c;北美機器人工業以20%的平均年增長率發展。在汽車市場需求疲軟以及外國廠商的壓力不斷增加的背景下&#xff0c;這一成就是如何取得的&#xff1f;成本的普遍…

ASP站點無法訪問怎么辦

確保啟用了目錄瀏覽功能 轉載于:https://www.cnblogs.com/acetaohai123/p/6571257.html

五、案例-指令參考-freemarker指令、表達式

案例-指令參考描述&#xff1a;本人自己測試寫了一遍&#xff0c;如有錯的地方&#xff0c;懂freemarker的朋友望指點指點&#xff01; 案例-指令參考 表達式 一、 Assign 1、<#assign name1"北京" name2"上海" name3"廣東"> 調用&#xf…

PartitionMotionSearch()函數

encode_one_macroblock()函數中的運動估計分為兩大塊&#xff0c;對于宏塊級的三種模式&#xff0c;分塊后直接對patition依次調用PartitionMotionSearch()函數&#xff1b;而對于亞宏塊級的&#xff08;含8x8, 8x4,4x8,4x4&#xff09;模式&#xff0c;首先將宏塊拆分為4個88子…

201521123017 《Java程序設計》第4周學習總結

1. 本周學習總結 2. 書面作業 Q1.注釋的應用 使用類的注釋與方法的注釋為前面編寫的類與方法進行注釋&#xff0c;并在Eclipse中查看。(截圖) Q2.面向對象設計(大作業1&#xff0c;非常重要) 2.1 將在網上商城購物或者在班級博客進行學習這一過程&#xff0c;描述成一個故事。…

完整的VAL3程序

start() begin//延時10秒 delay(5)//初始化變量call init()//清空原有運動堆棧resetMotion()//建立上電任務taskCreate "robotpower",100,robotpower()wait(isPowered())//建立生產任務taskCreate "ProductionCycle",10,ProductionCycle()//建立安全區域…

iOS WebView 加載本地資源(圖片,文件等)

NSString *path [[NSBundle mainBundle] pathForResource:"關于.docx" ofType:nil]; NSURL *url [NSURL fileURLWithPath:path]; NSLog("%", [self mimeType:url]); //webview加載本地文件&#xff0c;可以使用加載數據的方式 //第一個誒參數是一個N…

本文以H264視頻流為例,講解解碼流數據的步驟。

本文以H264視頻流為例&#xff0c;講解解碼流數據的步驟。 為突出重點&#xff0c;本文只專注于討論解碼視頻流數據&#xff0c;不涉及其它&#xff08;如開發環境的配置等&#xff09;。如果您需要這方面的信息&#xff0c;請和我聯系。 準備變量 定義AVCodecContext。如…

2008-2021年商業銀行數據(農商行、城商行、國有行、股份制銀行)

2008-2021年商業銀行數據&#xff08;農商行、城商行、國有行、股份制銀行&#xff09; 1、時間&#xff1a;2008-2021年 2、范圍&#xff1a;1700銀行 3 、指標&#xff1a;證券簡稱、year、證券代碼、資產總計、負債合計、所有者權益合計、利潤總額、凈利潤、貸款總額、存…