z#define BLYNK_TEMPLATE_ID "TMPL6VGzyt_QD"
#define BLYNK_TEMPLATE_NAME "Jemuran Pintar"
#define BLYNK_AUTH_TOKEN "L8sKAMro3UIEKXPaKQt4OCcW8mlSxpZO"

#include <Wire.h>
#include <DHT.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <ESP32Servo.h>
#include <LiquidCrystal_I2C.h>

#define BLYNK_PRINT Serial1

char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";

BlynkTimer timer;

int ldr, hujan;
Servo Jemuran_1;
DHT dht(15, DHT22);  // Gunakan GPIO 4 sebagai pin Data untuk DHT22

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

bool status = false;
bool buttonStatus = false;
BLYNK_WRITE(V0)
{
  int pinValue = param.asInt();

  if (pinValue == 1) {
    status = true;
    Blynk.virtualWrite(V3, "Jemuran Kebuka");
  } else {
    status = false;
    Jemuran_1.write(180);
  }
  buttonStatus = status;
}

void setup() {
  Serial1.begin(115200);  // Ubah ke Serial1 untuk monitor serial
  Jemuran_1.attach(25);
  Blynk.begin(auth, ssid, pass);

  Wire.begin();  // Inisialisasi komunikasi I2C

  lcd.begin(16, 2);  // Inisialisasi LCD dengan 16 kolom dan 2 baris
  lcd.backlight();   // Aktifkan pencahayaan latar LCD
}

void loop() {
  Blynk.run();
  timer.run();
  ldr =map(analogRead(34), 0, 4096, 100,0); // Baca nilai tingkat kecerahan dari pin analog 34
  hujan = map(analogRead(35), 0, 4095, 0, 100);  // Ubah batas nilai analog sesuai dengan karakteristik sensor hujan
  Blynk.virtualWrite(V4, ldr);
  Blynk.virtualWrite(V5, ldr);

  if (status == true) {
    Jemuran_1.write(0);
    Blynk.virtualWrite(V3, "Jemuran Kebuka");
  } else {
    if (ldr < 30) {
      Blynk.virtualWrite(V3, "Jemuran Ketutup");
      Blynk.virtualWrite(V2, "Suasana Mendung/Gelap");
      Blynk.logEvent("cuaca_gelap","Suasana Mendung/Gelap");
      Blynk.virtualWrite(V0, LOW);
    } else if (hujan > 40) {
      Jemuran_1.write(180);
      Blynk.virtualWrite(V3, "Jemuran Ketutup");
      Blynk.virtualWrite(V8, "Sedang Hujan");
    } else {
      Jemuran_1.write(0);
      Blynk.virtualWrite(V3, "Jemuran Kebuka");
      Blynk.virtualWrite(V2, "Suasana Cerah");
      Blynk.virtualWrite(V8, "Tidak Hujan");
    }
  }

  float temperature = dht.readTemperature();
  if (!isnan(temperature)) {
    Blynk.virtualWrite(V6, temperature);
  }

  lcd.setCursor(0, 0);
  lcd.print("Temp: ");
  lcd.print(temperature);
  lcd.print("C");

  Serial1.print("Temperature: ");
  Serial1.print(temperature);

  delay(1000);
}