#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define DHTPIN 2 // Pin sensor DHT
#define DHTTYPE DHT22 // Gunakan DHT22 atau DHT11 sesuai sensor
DHT dht(DHTPIN, DHTTYPE);
#define LED_PIN 3 // Pin LED
#define BUZZER_PIN 8 // Pin Buzzer
// Konfigurasi LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C bisa 0x27 atau 0x3F tergantung modul
// Batas suhu untuk peringatan
#define TEMP_WARNING 23 // Suhu mulai nyalakan LED
#define TEMP_ALARM 20 // Suhu mulai nyalakan buzzer
void setup() {
Serial.begin(9600);
dht.begin();
lcd.init(); // Perbaikan dari lcd.begin() ke lcd.init()
lcd.backlight();
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
}
void loop() {
float suhu = dht.readTemperature();
float kelembaban = dht.readHumidity();
if (isnan(suhu) || isnan(kelembaban)) {
Serial.println("Gagal membaca sensor!");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor Error!");
delay(2000);
return;
}
Serial.print("Suhu: ");
Serial.print(suhu);
Serial.print("°C, Kelembaban: ");
Serial.print(kelembaban);
Serial.println("%");
// Tampilkan di LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(suhu);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Kelembaban: ");
lcd.print(kelembaban);
lcd.print("%");
// Kontrol LED sebagai peringatan suhu
if (suhu >= TEMP_WARNING) {
digitalWrite(LED_PIN, HIGH);
Serial.println("LED: ON (Peringatan Suhu)");
} else {
digitalWrite(LED_PIN, LOW);
Serial.println("LED: OFF");
}
// Kontrol Buzzer jika suhu terlalu tinggi
if (suhu >= TEMP_ALARM) {
digitalWrite(BUZZER_PIN, HIGH);
tone(BUZZER_PIN, 1000);
Serial.println("Buzzer: ON (Alarm Suhu Tinggi!)");
} else {
digitalWrite(BUZZER_PIN, LOW);
Serial.println("Buzzer: OFF");
}
delay(2000); // Baca sensor setiap 2 detik
}