close

因應LCD使用的程式庫更換為LiquidCrystal_PCF8574,有許多函式的用法已經跟舊版不同,

底下就是重新改寫過的程式,相關註解也都寫上去了。

 

/*
 * 重新改寫DHT22與LCD1602A的程式
 * 因應LCD程式庫改用LiquidCrystal_PCF8574而使用的函數跟著變更
 * LCD 1602A接到I2C bus
 * DHT22輸入接到Arduino UNO的pin2
 *
 * 使用程式庫:
 * LiquidCrystal_PCF8574 libraty 1.3.0
 * DHT sensor library 1.4.2
 *
 * 2021.07.31 Luyaku
 * 程式名稱 PFC8574_DHT22.ino
 */

#include <LiquidCrystal_PCF8574.h>
#include "DHT.h"
#define DHTPIN 2          //DHT22接到Pin2
#define DHTTYPE DHT22     //我用的是DHT22,宣告為DHT22

LiquidCrystal_PCF8574 lcd(0x27);  // 設定i2c位址,一般情況就是0x27和0x3F兩種,我的是0x27

DHT dht(DHTPIN, DHTTYPE);

void setup()
{
  Serial.begin(9600);
  Serial.println("DHT22 test!");
  dht.begin();  //初始化DHT
 
  lcd.begin(16, 2); // 初始化LCD
  // 閃爍三次
  for(int i = 0; i < 3; i++) {
  lcd.setBacklight(1); // 開啟背光
  delay(250);
  lcd.setBacklight(0); // 關閉背光
  delay(250);
  }
 
  lcd.setBacklight(1);
  delay(1000);
  lcd.clear();
  lcd.setCursor(0, 0);  //設定游標位置 (字,行)
  lcd.print("Hello, world!");
  lcd.setCursor(0, 1);
  lcd.print("LCD is Working!");
  delay(2000);
} //完成setup()

void loop()
{
  float h = dht.readHumidity();   //取得濕度
  float t = dht.readTemperature();  //取得溫度C
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.println(" *C ");
  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  //輸出到com port
 
  lcd.clear();
  lcd.setCursor(0, 0);  //設定游標位置 (第0字,第0行)

  lcd.print("Temp:");
  lcd.setCursor(7, 0);  
  lcd.print(t);
  lcd.setCursor(13, 0);
  lcd.print((char)223); //用特殊字元顯示符號的"度"
  lcd.setCursor(14, 0);
  lcd.print("C");
 
  lcd.setCursor(0, 1);  //設定游標位置 (第0字,第1行)  
  lcd.print("RH  :");  //Relative Humidity 相對濕度簡寫
  lcd.setCursor(7, 1);  
  lcd.print(h);
  lcd.setCursor(14, 1);
  lcd.print("%");

  delay(1000); //每隔一秒讀取及顯示一次
 
} // 完成loop()

 

輸出的照片:

DHT22+LCD

 

arrow
arrow
    全站熱搜

    呂阿谷 發表在 痞客邦 留言(0) 人氣()