#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define BUTTON_PIN 14  // Pin untuk pushbutton
#define BUZZER_PIN 27  // Pin untuk buzzer
#define RELAY_PIN 26   // Pin untuk relay
#define LED_PIN 25     // Pin untuk LED

LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C LCD, 16 kolom dan 2 baris

bool systemState = false; // Status sistem (ON/OFF)

void setup() {
  // Inisialisasi pin
  pinMode(BUTTON_PIN, INPUT); // Menggunakan input biasa
  pinMode(BUZZER_PIN, OUTPUT);
  pinMode(RELAY_PIN, OUTPUT);
  pinMode(LED_PIN, OUTPUT);

  // Inisialisasi LCD
  Wire.begin(21, 22);
  lcd.begin(16, 2);
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("ESP32 Control");
  lcd.setCursor(0, 1);
  lcd.print("Press Button");
}

void loop() {
  static bool lastButtonState = HIGH; // Status tombol sebelumnya
  bool currentButtonState = digitalRead(BUTTON_PIN); // Membaca status tombol

  // Deteksi perubahan status tombol
  if (lastButtonState == HIGH && currentButtonState == LOW) {
    // Toggle status sistem
    systemState = !systemState;

    if (systemState) {
      // Jika sistem ON
      digitalWrite(RELAY_PIN, HIGH); // Menghidupkan relay
      digitalWrite(LED_PIN, HIGH); // Menghidupkan LED
      tone(BUZZER_PIN, 1000); // Menghidupkan buzzer
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Status: ON");
    } else {
      // Jika sistem OFF
      digitalWrite(RELAY_PIN, LOW); // Mematikan relay
      digitalWrite(LED_PIN, LOW); // Mematikan LED
      noTone(BUZZER_PIN); // Mematikan buzzer
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Status: OFF");
    }
    delay(200); // Debounce delay
  }

  lastButtonState = currentButtonState; // Simpan status tombol saat ini
}
NOCOMNCVCCGNDINLED1PWRRelay Module