#include <dht.h>
#include <LiquidCrystal_I2C.h>
#define relay 3
#define buzzer 8
int red = 13;
int green = 12;
dht DHT22;
bool buzzerFlag = false; // Flag untuk melacak status buzzer
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(2, INPUT);
pinMode(relay, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
lcd.init();
lcd.clear();
lcd.backlight();
tone(buzzer, 1000);
delay(225);
tone(buzzer, 1500);
delay(225);
tone(buzzer, 2000);
delay(225);
noTone(buzzer);
delay(275);
}
void loop() {
// put your main code here, to run repeatedly:
int readData = DHT22.read22(2);
int temp = DHT22.temperature;
int tempf = 1.8 * temp + 32;
int humid = DHT22.humidity;
lcd.setCursor(0, 0);
lcd.print("Tempratur:");
lcd.print(temp);
lcd.write(0xDF); // Simbol derajat
lcd.print("C/"); // Celcius
lcd.print(tempf);
lcd.write(0xDF); // Simbol derajat
lcd.print("F "); // Fahrenheit
lcd.setCursor(0, 1);
lcd.print("Kelembapan: ");
lcd.print(humid);
lcd.print("%");
if (temp >= 28) {
digitalWrite(red, HIGH);
digitalWrite(green, LOW);
digitalWrite(relay, HIGH);
lcd.setCursor(0, 2);
lcd.print("Suhu panas ");
lcd.setCursor(0, 3);
lcd.print("Meyalakan kipas");
if (!buzzerFlag) { // Jika buzzer belum berbunyi
tone(buzzer, 2000, 500);
buzzerFlag = true; // Tandai bahwa buzzer sudah berbunyi
}
} else {
digitalWrite(red, LOW);
digitalWrite(green, HIGH);
digitalWrite(relay, LOW);
lcd.setCursor(0, 2);
lcd.print("Tidak panas");
lcd.setCursor(0, 3);
lcd.print("Kipas dimatikan");
buzzerFlag = false; // Reset flag ketika suhu kembali normal agar dapat berbunyi kembali ketika suhu panas
}
delay(1000);
}