#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define DHTPIN 4 // Pin tempat Anda menghubungkan sensor DHT11
#define DHTTYPE DHT22 // Tipe sensor DHT
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C LCD 0x27 (Anda mungkin perlu menyesuaikan ini)
const int purpleLedPin = 12; // Pin LED ungu
const int redLedPin = 2; // Pin LED merah
const int buttonPin = 5; // Pin untuk tombol on/off
bool lcdOn = true; // Status LCD, defaultnya aktif
bool displayTemp = true; // Status untuk menampilkan suhu atau kelembapan
bool systemOn = true; // Status perangkat hidup/mati
bool buttonState = HIGH; // Status awal tombol (off)
void setup() {
pinMode(purpleLedPin, OUTPUT);
pinMode(redLedPin, OUTPUT);
dht.begin();
lcd.init();
lcd.backlight();
lcd.clear(); // Hapus konten layar LCD saat inisialisasi
pinMode(buttonPin, INPUT_PULLUP); // Inisialisasi tombol dengan pull-up internal
}
void loop() {
// Baca tombol ON/OFF
int newButtonState = digitalRead(buttonPin);
if (newButtonState == LOW && buttonState == HIGH) {
// Tombol ditekan, toggle status perangkat
systemOn = !systemOn;
if (systemOn) {
// Perangkat dihidupkan kembali, tampilkan pesan di LCD
lcdOn = true;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("System ON");
delay(1000);
lcd.setCursor(0, 1); // Pindahkan kursor ke baris kedua
lcd.print(" "); // Menghapus baris kedua dengan karakter kosong (spasi)
} else {
// Perangkat dimatikan, matikan semua perangkat
lcdOn = false;
digitalWrite(purpleLedPin, LOW);
digitalWrite(redLedPin, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("System OFF");
delay(1000);
}
}
buttonState = newButtonState;
if (systemOn) {
// Baca suhu dan kelembapan dari sensor DHT11
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (temperature <= 15) {
digitalWrite(purpleLedPin, HIGH); // Nyalakan LED ungu
digitalWrite(redLedPin, LOW); // Matikan LED merah
lcd.setCursor(0, 0);
lcd.print("Status: PURPLE ");
} else {
digitalWrite(purpleLedPin, LOW); // Matikan LED ungu
digitalWrite(redLedPin, HIGH); // Nyalakan LED merah
lcd.setCursor(0, 0);
lcd.print("Status: RED ");
}
// Tampilkan suhu atau kelembapan bergantian di baris kedua LCD
lcd.setCursor(0, 1);
lcd.print(" "); // Menghapus baris kedua dengan karakter kosong (spasi)
lcd.setCursor(0, 1); // Pindahkan kursor ke baris kedua
if (displayTemp) {
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print(" C");
} else {
lcd.print("Humidity: ");
lcd.print(humidity);
lcd.print("%");
}
displayTemp = !displayTemp;
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("System OFF");
digitalWrite(purpleLedPin, LOW);
digitalWrite(redLedPin, LOW);
}
delay(1000);
}