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

#define LED_HIJAU 3
#define LED_KUNING 4
#define LED_MERAH 5
#define BUZZER 6
#define PIR_PIN 2
#define GAS_SENSOR A0

Servo myServo;
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  pinMode(LED_HIJAU, OUTPUT);
  pinMode(LED_KUNING, OUTPUT);
  pinMode(LED_MERAH, OUTPUT);
  pinMode(BUZZER, OUTPUT);
  pinMode(PIR_PIN, INPUT);

  myServo.attach(9);
  lcd.init();
  lcd.backlight();

  // Tampilkan nilai default saat pertama nyala
  lcd.setCursor(0, 0);
  lcd.print("Gas ADC: 150");
  lcd.setCursor(0, 1);
  lcd.print("Init sensor...");
  delay(3000); // Tunggu 3 detik sebelum mulai baca sensor
}

void loop() {
  int gasValue = analogRead(GAS_SENSOR);
  bool pirState = digitalRead(PIR_PIN);

  if (pirState == HIGH) {
    digitalWrite(LED_HIJAU, HIGH);
    digitalWrite(LED_KUNING, HIGH);
    digitalWrite(LED_MERAH, HIGH);
    digitalWrite(BUZZER, HIGH);
    myServo.write(90);

    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("EVAKUASI");
    lcd.setCursor(0, 1);
    lcd.print("BERLANGSUNG");
  } else {
    digitalWrite(BUZZER, LOW);
    myServo.write(0);

    if (gasValue < 250) {
      digitalWrite(LED_HIJAU, HIGH);
      digitalWrite(LED_KUNING, LOW);
      digitalWrite(LED_MERAH, LOW);
    } else if (gasValue >= 250 && gasValue <= 400) {
      digitalWrite(LED_HIJAU, LOW);
      digitalWrite(LED_KUNING, HIGH);
      digitalWrite(LED_MERAH, LOW);
    } else {
      digitalWrite(LED_HIJAU, LOW);
      digitalWrite(LED_KUNING, LOW);
      digitalWrite(LED_MERAH, HIGH);
      digitalWrite(BUZZER, HIGH);
      myServo.write(90);
    }

    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Gas ADC: ");
    lcd.print(gasValue);

    lcd.setCursor(0, 1);
    lcd.print("Servo:");
    lcd.print(myServo.read());
    lcd.print(" Buz:");
    lcd.print(digitalRead(BUZZER));
  }

  delay(500);
}