#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Konfigurasi LCD 1604
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
// Konfigurasi DHD22 (Sensor Temperatur/Kelembapan)
#define DHT_PIN 2
#define DHT_TYPE DHT22
#define DHT_INTERVAL 1000
DHT dht(DHT_PIN, DHT_TYPE);
// Karakter derajat
uint8_t derajat[] = {
0b01110,
0b10001,
0b10001,
0b01110,
0b00000,
0b00000,
0b00000,
0b00000
};
float suhuCelcius, suhuFahrenheit, kelembapan;
uint32_t timerDHT = DHT_INTERVAL;
String dataSuhu;
String dataKelembapan;
// Mengambil data DHT22
void getDHTSensorData(){
if((millis()-timerDHT)>DHT_INTERVAL){
timerDHT=millis();
// Membaca suhu dalam Celcius (default)
suhuCelcius=dht.readTemperature();
// Membaca suhu dalam Fahrenheit (isFahrenheit=true)
suhuFahrenheit=dht.readTemperature(true);
// Membaca kelembapan
kelembapan=dht.readHumidity();
// Cek jika terjadi kegagalan membaca sensor (langsung exit)
if(isnan(suhuCelcius) || isnan(suhuFahrenheit) || isnan(kelembapan)){
Serial.println("Gagal membaca sensor DHT");
return;
}
}
}
void setup() {
lcd.init();
lcd.backlight();
Serial.begin(9600);
dht.begin();
lcd.createChar(1, derajat);
lcd.setCursor(3, 0);
lcd.print("Temperature :");
lcd.setCursor(3,2);
lcd.print("Kelembapan :");
}
void loop() {
getDHTSensorData();
dataSuhu=String(suhuCelcius)+"\1C"+"/"+String(suhuFahrenheit)+"\1F";
dataKelembapan=String(kelembapan)+"%";
lcd.setCursor(2,1);
lcd.print(dataSuhu);
lcd.setCursor(7,3);
lcd.print(dataKelembapan);
}