#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#define DHTPIN A0 // Pin untuk sensor DHT
#define DHTTYPE DHT11 // Tipe sensor DHT
#define BUZZER1 8 // Pin Buzzer 1
#define BUZZER2 9 // Pin Buzzer 2
#define LED1 3 // Pin LED 1
#define LED2 4 // Pin LED 2
LiquidCrystal_I2C lcd(0x27, 16, 2); // Inisialisasi LCD I2C
DHT dht(DHTPIN, DHTTYPE); // Inisialisasi sensor DHT
float t; // Variabel suhu
float h; // Variabel kelembaban
unsigned long previousMillis = 0; // Variabel untuk waktu kedipan
const long interval = 500; // Interval kedipan LED (500ms)
bool ledState = false; // Status LED (OFF atau ON)
void setup()
{
dht.begin();
lcd.init();
lcd.backlight(); // Menyalakan backlight LCD
// Pin LED dan Buzzer
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(BUZZER1, OUTPUT);
pinMode(BUZZER2, OUTPUT);
}
void loop()
{
// Membaca suhu dan kelembaban dari sensor DHT
t = dht.readTemperature();
h = dht.readHumidity();
// Memastikan pembacaan sensor valid
if (isnan(t) || isnan(h)) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor Error!");
return;
}
// Kondisi untuk suhu normal (0°C - 28°C)
if (t >= 0 && t <= 28) {
// Suhu normal
digitalWrite(LED1, HIGH); // LED 1 menyala
digitalWrite(LED2, LOW); // LED 2 mati
digitalWrite(BUZZER1, HIGH); // Nyalakan Buzzer 1
tone(BUZZER1, 1000, 500); // Buzzer 1 berbunyi dengan melodi 1000 Hz selama 500 ms
digitalWrite(BUZZER2, LOW); // Matikan Buzzer 2
// Tampilkan pada LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SuhuNormal:");
lcd.print(t);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Kelembaban:");
lcd.print(h);
lcd.print("%");
}
// Kondisi untuk suhu sangat panas (>32°C)
else if (t >= 32) {
// Suhu sangat panas
digitalWrite(LED1, LOW); // LED 1 mati
digitalWrite(LED2, LOW); // LED 2 mati
digitalWrite(BUZZER1, LOW); // Matikan Buzzer 1
digitalWrite(BUZZER2, HIGH); // Nyalakan Buzzer 2
tone(BUZZER2, 1500, 500); // Buzzer 2 berbunyi dengan melodi 1500 Hz selama 500 ms
// Kedipkan LED 2
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
ledState = !ledState; // Toggle LED state
digitalWrite(LED2, ledState ? HIGH : LOW); // Mengubah status LED 2
}
// Tampilkan suhu dan kelembaban pada LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SuhuPanas:");
lcd.print(t);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Kelembaban:");
lcd.print(h);
lcd.print("%");
}
delay(1000); // Delay 100ms sebelum update berikutnya
}