#include "DHTesp.h"
#include "Servo.h"
#define PIN_WATERPUMP 4
#define PIN_LDR 35
String pump;
int ldr = 0; const float GAMMA = 0.7; const float RL10 = 50; float voltage, resistance, lux; int adcValue = 0;
int temp = 0;
int hum = 0;
const int DHT_PIN = 15;
const int BUZZER = 18;
const int servoPin = 2;

DHTesp dhtSensor;
Servo servo;

void setup() {
  Serial.begin(115200);
  pinMode(BUZZER, OUTPUT);//buzzer
  pinMode(5,OUTPUT);//led merah
  pinMode(4,OUTPUT);//pump
  pinMode(35, INPUT);
  dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
  servo.attach(servoPin);
}

void loop() {
  adcValue = analogRead(PIN_LDR); // Baca Tegangan Analog Sensor LDR
  voltage = adcValue * 5/4095.0; // ESP bit=12 -> 4095, 5=Tegangan Referensi
  resistance = 2000 * voltage / (1 - voltage / 5); // Rumus Resistansi Cahaya
  ldr = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA)); // Rumus Intensitas Cahaya
  temp = dhtSensor.getTemperature(); // ekstrak data temperature
  hum = dhtSensor.getHumidity(); // ekstrak data humidity

  Serial.println("=========================================");
  Serial.println("Suhu Udara: "+String(temp)+"°C");
  Serial.println("Kelembaban Udara: "+String(hum)+"%");
  Serial.println("Intensitas Cahaya: "+String(ldr)+"lux");
  delay(1000);

if (temp < 20){
    if (hum > 60) {
    Serial.println("AMAN");
    digitalWrite(5, LOW);
    digitalWrite(4, LOW);
    pump = "OFF";
    noTone(BUZZER);
    // servo.write(0);
    }
  }

  else if (temp > 32){
    if (hum < 60) {
    Serial.println("BAHAYA API!!!");
    digitalWrite(5, HIGH);
    Serial.println("MENYEMPROTKAN FOAM.....");
    digitalWrite(19, HIGH);
    digitalWrite(4, HIGH);
    pump = "ON";
    tone(BUZZER, 165);
    // servo.write(90);
    }
  }

if (ldr < 200) {
    Serial.println("AMAN");
    digitalWrite(5, LOW);
    digitalWrite(4, LOW);
    pump = "OFF";
    noTone(BUZZER);
    // servo.write(0);
  }

  else if (ldr > 600) {
    Serial.println("BAHAYA API!!!");
    digitalWrite(5, HIGH);
    Serial.println("MENYEMPROTKAN FOAM.....");
    digitalWrite(19, HIGH);
    digitalWrite(4, HIGH);
    pump = "ON";
    tone(BUZZER, 165);
    // servo.write(90);
  }

// if (pump = "OFF") {
//   servo.write(0);
// } else {
//   servo.write(90);
// }

if (ldr > 600) {
  servo.write(90);
} else {
  servo.write(0);
}
}
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
dht1:VCC
dht1:SDA
dht1:NC
dht1:GND
led1:A
led1:C
bz1:1
bz1:2
led2:A
led2:C
NOCOMNCVCCGNDINLED1PWRRelay Module
relay1:VCC
relay1:GND
relay1:IN
relay1:NC
relay1:COM
relay1:NO
ldr1:VCC
ldr1:GND
ldr1:DO
ldr1:AO
r1:1
r1:2
r2:1
r2:2
servo1:GND
servo1:V+
servo1:PWM