#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);
}
$abcdeabcde151015202530fghijfghij
esp1:VIN
esp1:GND.2
esp1:D13
esp1:D12
esp1:D14
esp1:D27
esp1:D26
esp1:D25
esp1:D33
esp1:D32
esp1:D35
esp1:D34
esp1:VN
esp1:VP
esp1:EN
esp1:3V3
esp1:GND.1
esp1:D15
esp1:D2
esp1:D4
esp1:RX2
esp1:TX2
esp1:D5
esp1:D18
esp1:D19
esp1:D21
esp1:RX0
esp1:TX0
esp1:D22
esp1:D23
dht1:VCC
dht1:SDA
dht1:NC
dht1:GND
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
led1:A
led1:C
led2:A
led2:C
r1:1
r1:2
r2:1
r2:2