#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define DHTTYPE DHT22 // Tipe sensor DHT (DHT11 atau DHT22)
#define DHT_PIN 12 // Pin yang terhubung dengan sensor DHT22
#define LDR_PIN_AO A3 // Pin AO sensor LDR
#define RED_LED_PIN 9 // Pin untuk LED merah
#define YELLOW_LED_PIN 10 // Pin untuk LED kuning
#define GREEN_LED_PIN 11 // Pin untuk LED hijau
#define BUZZER_PIN 6 // Pin untuk buzzer
#define BATAS_SUHU_BAWAH 18.0 // Batas bawah suhu yang ditentukan
#define BATAS_SUHU_ATAS 32.0 // Batas atas suhu yang ditentukan
#define BATAS_KELEMBAPAN_BAWAH 40 // Batas bawah kelembapan yang ditentukan
#define BATAS_KELEMBAPAN_ATAS 60 // Batas atas kelembapan yang ditentukan
#define BATAS_LUX 500 // Batas lux yang ditentukan
DHT dht(DHT_PIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C: 0x27, Ukuran LCD: 16x2
int currentDisplay = 0; // Indeks tampilan saat ini
const int numDisplays = 2; // Jumlah tampilan yang ingin ditampilkan
void setup() {
setupLCD();
setupSensors();
setupLEDs();
setupBuzzer();
displayStartupMessage();
}
void loop() {
float humidity = readHumidity();
float temperature = readTemperature();
int ldrValue = readLDRValue();
float lux = ldrValue;
displayData(temperature, humidity, lux);
updateLEDs(temperature, humidity, lux);
activateBuzzer(temperature, humidity, lux);
delay(2000);
}
void setupLCD() {
lcd.begin(16, 2);
lcd.backlight();
}
void setupSensors() {
dht.begin();
}
void setupLEDs() {
pinMode(RED_LED_PIN, OUTPUT);
pinMode(YELLOW_LED_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
}
void setupBuzzer() {
pinMode(BUZZER_PIN, OUTPUT);
}
void displayStartupMessage() {
lcd.setCursor(0, 0);
lcd.print("M. TEGAR BAYU A");
lcd.setCursor(0, 1);
lcd.print("2215061023");
delay(2000);
lcd.clear();
}
float readHumidity() {
return dht.readHumidity();
}
float readTemperature() {
return dht.readTemperature();
}
int readLDRValue() {
return analogRead(LDR_PIN_AO);
}
void displayData(float temperature, float humidity, float lux) {
lcd.clear();
lcd.setCursor(0, 0);
switch (currentDisplay) {
case 0:
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(temperature);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Kelembapan: ");
lcd.print(humidity);
lcd.print("%");
break;
case 1:
lcd.setCursor(0, 0);
lcd.print("Lux: ");
lcd.print(lux);
break;
}
currentDisplay = (currentDisplay + 1) % numDisplays;
}
void updateLEDs(float temperature, float humidity, float lux) {
digitalWrite(RED_LED_PIN, (temperature < BATAS_SUHU_BAWAH || temperature > BATAS_SUHU_ATAS) ? HIGH : LOW);
digitalWrite(YELLOW_LED_PIN, (humidity < BATAS_KELEMBAPAN_BAWAH || humidity > BATAS_KELEMBAPAN_ATAS) ? HIGH : LOW);
digitalWrite(GREEN_LED_PIN, (lux > BATAS_LUX) ? HIGH : LOW);
}
void activateBuzzer(float temperature, float humidity, float lux) {
digitalWrite(BUZZER_PIN, (temperature < BATAS_SUHU_BAWAH || temperature > BATAS_SUHU_ATAS ||
humidity < BATAS_KELEMBAPAN_BAWAH || humidity > BATAS_KELEMBAPAN_ATAS ||
lux > BATAS_LUX) ? HIGH : LOW);
}