#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Definisi PIN Sensor
#define DHTPIN 2
#define DHTTYPE DHT22
#define TMP_PIN A1
#define MQ135_PIN A2
// Inisialisasi Library
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// Inisialisasi LCD & DHT
lcd.init();
lcd.backlight();
dht.begin();
// Setup Pin Mode Sensor Analog
pinMode(TMP_PIN, INPUT);
pinMode(MQ135_PIN, INPUT);
// Tampilan Awal (Booting)
lcd.setCursor(0, 0);
lcd.print("Menginisialisasi");
lcd.setCursor(0, 1);
lcd.print("Sistem Sensor...");
delay(2000);
lcd.clear();
}
void loop() {
// --- 1. MEMBACA DATA SEMUA SENSOR ---
// Baca DHT22
float humDHT = dht.readHumidity();
float tempDHT = dht.readTemperature();
// Baca TMP36 (Sensor Suhu Analog)
int tmpRaw = analogRead(TMP_PIN);
float voltage = tmpRaw * (5.0 / 1023.0);
float tempAnalog = (voltage - 0.5) * 100.0; // Rumus konversi TMP36 ke Celcius
// Baca Sensor Gas MQ-135
int nilaiGas = analogRead(MQ135_PIN);
// --- 2. MENAMPILKAN DATA DI LCD (Sistem Halaman bergantian) ---
// HALAMAN 1: Menampilkan Data Suhu (DHT22 vs TMP36)
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("T.DHT22 : ");
if (isnan(tempDHT)) {
lcd.print("Error");
} else {
lcd.print(tempDHT, 1);
lcd.print((char)223); lcd.print("C"); // Simbol derajat
}
lcd.setCursor(0, 1);
lcd.print("T.Analg : ");
lcd.print(tempAnalog, 1);
lcd.print((char)223); lcd.print("C");
delay(3000); // Tampilkan Halaman 1 selama 3 detik
// HALAMAN 2: Menampilkan Kelembapan & Kadar Gas
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Lembab : ");
if (isnan(humDHT)) {
lcd.print("Error");
} else {
lcd.print(humDHT, 1);
lcd.print("%");
}
lcd.setCursor(0, 1);
lcd.print("Gas/PPM : ");
lcd.print(nilaiGas);
// Keterangan kondisi gas singkat
if (nilaiGas < 300) {
lcd.print(" (Aman)");
} else if (nilaiGas < 600) {
lcd.print(" (Waspada)");
} else {
lcd.print(" (Bahaya)");
}
delay(3000); // Tampilkan Halaman 2 selama 3 detik
}