#include <LiquidCrystal.h>
#include <DHT.h>
#define LED 1
#define RED_PIN 2
#define GREEN_PIN 3
#define BLUE_PIN 4
#define BUZZER_PIN1 6
#define BUZZER_PIN2 5
#define DHT_PIN 7 // Sesuaikan dengan pin yang digunakan untuk sensor DHT22
#define DHT_TYPE DHT22 // Jenis sensor DHT (DHT11 atau DHT22)
#define PIR_PIN 13 // Sesuaikan dengan pin GPIO yang digunakan untuk sensor PIR
#define LDR_PIN 14 // Sesuaikan dengan pin GPIO yang digunakan untuk sensor LDR
DHT dht(DHT_PIN, DHT_TYPE);
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
bool isLedOn = false; // Menyimpan status LED
bool pirMotionDetected = false; // Menyimpan status deteksi gerakan oleh sensor PIR
void setup() {
lcd.begin(16, 2);
lcd.print("HELLO!");
pinMode(LED, OUTPUT);
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
pinMode(BUZZER_PIN1, OUTPUT);
pinMode(BUZZER_PIN2, OUTPUT);
pinMode(PIR_PIN, INPUT); // Sensor PIR diatur sebagai input
pinMode(LDR_PIN, INPUT); // Sensor LDR diatur sebagai input
dht.begin();
}
void playTone(int frequency, int duration) {
tone(BUZZER_PIN1, frequency, duration);
tone(BUZZER_PIN2, frequency, duration);
delay(duration);
}
void loop() {
// Membaca suhu dari sensor DHT22
float temperature = dht.readTemperature();
// Membaca status sensor PIR
pirMotionDetected = digitalRead(PIR_PIN) == HIGH;
// Membaca nilai dari sensor LDR
int ldrValue = digitalRead(LDR_PIN);
if (temperature > 30.0 || pirMotionDetected || ldrValue == LOW) {
if (!isLedOn) {
// Menyalakan LED dan sensor RGB LED menjadi hijau
digitalWrite(LED, HIGH); // Menyalakan LED
digitalWrite(RED_PIN, LOW); // Merah OFF
digitalWrite(GREEN_PIN, HIGH); // Hijau ON
digitalWrite(BLUE_PIN, LOW); // Biru OFF
playTone(500, 1000); // Frekuensi 500 Hz, durasi 1000 ms
playTone(1000, 1000); // Frekuensi 1000 Hz, durasi 1000 ms
lcd.setCursor(0, 0);
lcd.print("Green ");
lcd.setCursor(0, 1);
lcd.print("LED ON ");
lcd.setCursor(12, 1); // Pindah ke kolom ke-12 di baris kedua
lcd.print("Status ON"); // Menampilkan "Status ON" di kolom ke-12
isLedOn = true;
}
// Jika ada gerakan terdeteksi atau cahaya rendah, tampilkan "ada gerakan" di baris kedua
lcd.setCursor(0, 1);
lcd.print("Ada Gerakan ");
// Menghidupkan RGB LED, LED, dan buzzer saat kondisi terpenuhi
digitalWrite(RED_PIN, HIGH); // Merah ON
digitalWrite(GREEN_PIN, HIGH); // Hijau ON
digitalWrite(BLUE_PIN, HIGH); // Biru ON
playTone(1000, 1000); // Frekuensi 1000 Hz, durasi 1000 ms
} else {
// Mematikan LED dan sensor RGB LED
digitalWrite(LED, LOW); // Mematikan LED
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);
noTone(BUZZER_PIN1); // Mematikan suara pada BUZZER_PIN1
noTone(BUZZER_PIN2); // Mematikan suara pada BUZZER_PIN2
lcd.setCursor(0, 0);
lcd.print(" "); // Menghapus pesan di baris pertama
lcd.setCursor(0, 1);
// Jika tidak ada gerakan dan cahaya cukup tinggi, tampilkan "tidak ada gerakan" di baris kedua
lcd.print("Tidak Ada Gerakan");
isLedOn = false;
}
delay(5000); // Tunggu selama 5 detik sebelum beralih kondisi
}