#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define ldrPin A0
#define pirPin 2
#define buttonPin 3
#define ledLamp 4
#define ledFan 5
#define ledAlarm 6
#define buzzer 7
#define DHTPIN 8
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
bool manualMode = false;
bool lampManual = false;
int displayIndex = 0;
unsigned long lastDisplay = 0;
void setup() {
pinMode(pirPin, INPUT);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledLamp, OUTPUT);
pinMode(ledFan, OUTPUT);
pinMode(ledAlarm, OUTPUT);
pinMode(buzzer, OUTPUT);
Serial.begin(9600);
dht.begin();
lcd.init();
lcd.backlight();
}
void loop() {
int cahaya = analogRead(ldrPin);
int gerakan = digitalRead(pirPin);
int tombol = digitalRead(buttonPin);
float suhu = dht.readTemperature();
float lembab = dht.readHumidity();
//Logika Sistem
if (tombol == LOW) {
manualMode = !manualMode;
delay(300);
}
// Logika A Dan E
if (manualMode) {
if (tombol == LOW) {
lampManual = !lampManual;
digitalWrite(ledLamp, lampManual);
delay(300);
}
} else {
if (cahaya < 500 && gerakan == HIGH) {
digitalWrite(ledLamp, HIGH);
} else {
digitalWrite(ledLamp, LOW);
}
}
// LOGIKA B
if (suhu > 30) {
digitalWrite(ledFan, HIGH);
} else {
digitalWrite(ledFan, LOW);
}
// LOGIKA C
if (suhu > 35) {
digitalWrite(ledAlarm, HIGH); // LED merah
digitalWrite(ledFan, LOW); // LED biru mati
tone(buzzer, 1000);
}
else if (suhu > 30) {
digitalWrite(ledFan, HIGH); // LED biru
digitalWrite(ledAlarm, LOW); // LED merah mati
noTone(buzzer);
}
else {
digitalWrite(ledFan, LOW);
digitalWrite(ledAlarm, LOW);
noTone(buzzer);
}
// LOGIKA D Part Tampilan Cek Cahaya, Suhu, Dan Kelembapan
Serial.print("Cahaya: ");
Serial.print(cahaya);
Serial.print(" Suhu: ");
Serial.print(suhu);
Serial.print(" Hum: ");
Serial.println(lembab);
// LOGIKA D Part LCD DISPLAY BERGANTIAN
if (millis() - lastDisplay > 3000) {
lcd.clear();
if (displayIndex == 0) {
lcd.setCursor(0,0);
lcd.print("Suhu:");
lcd.print(suhu);
lcd.print("C");
}
else if (displayIndex == 1) {
lcd.setCursor(0,0);
lcd.print("Kelembaban:");
lcd.setCursor(0,1);
lcd.print(lembab);
lcd.print("%");
}
else if (displayIndex == 2) {
lcd.setCursor(0,0);
lcd.print("Lampu:");
if (digitalRead(ledLamp)) {
lcd.print("ON");
} else {
lcd.print("OFF");
}
}
else if (displayIndex == 3) {
lcd.setCursor(0,0);
lcd.print("Kipas:");
if (digitalRead(ledFan)) {
lcd.print("ON");
} else {
lcd.print("OFF");
}
}
else if (displayIndex == 4) {
lcd.setCursor(0,0);
lcd.print("Status:");
if (gerakan == HIGH) {
lcd.print("Ada Orang");
} else {
lcd.print("Kosong");
}
}
displayIndex++;
if (displayIndex > 4) {
displayIndex = 0;
}
lastDisplay = millis();
}
}