#include <ESP32Servo.h>
#include "DHTesp.h"

#define O 23
#define T 22
#define Th 21
#define F 19
#define Fi 18
#define Ser 5
#define Pot1 14
#define Pot2 12
#define DHT 27
#define LDR 13

Servo servo;
DHTesp dhtSensor;

void setup() {
  servo.attach(Ser, 500, 2400);
  Serial.begin(115200);
  pinMode(O, OUTPUT);
  pinMode(T, OUTPUT);
  pinMode(Th, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(Fi, OUTPUT);
  pinMode(Pot1, INPUT);
  pinMode(Pot2, INPUT);
  pinMode(LDR, INPUT);
  dhtSensor.setup(DHT, DHTesp::DHT22);
}

void loop() {
  TempAndHumidity  data = dhtSensor.getTempAndHumidity();
  int temp = map(data.temperature,-40,80,0,100);
  int humiditi = data.humidity;

  int Pot12 = map(analogRead(Pot1),0,4095,0,100);
  int Pot22 = map(analogRead(Pot2),0,4095,0,100);

  int svet = map(analogRead(LDR),4063,32,0,100);

  if (temp > 25 && humiditi > 75){
    digitalWrite(O, HIGH);
    digitalWrite(T, LOW);
    digitalWrite(Th, LOW);
    digitalWrite(F, LOW);
    digitalWrite(Fi, LOW);

    servo.write(45);
  }

  else if (Pot12 > 50 && Pot22 < 75){
    digitalWrite(O, LOW);
    digitalWrite(T, HIGH);
    digitalWrite(Th, LOW);
    digitalWrite(F, LOW);
    digitalWrite(Fi, LOW);

    servo.write(90);
  }

  else if (Pot12 == 0 && Pot22 == 0 && svet == 0 && temp == 0 && humiditi == 0){
    digitalWrite(O, LOW);
    digitalWrite(T, LOW);
    digitalWrite(Th, LOW);
    digitalWrite(F, LOW);
    digitalWrite(Fi, HIGH);

    servo.write(0);
  }

  else if (svet < 25 && humiditi < 75){
    digitalWrite(O, LOW);
    digitalWrite(T, LOW);
    digitalWrite(Th, HIGH);
    digitalWrite(F, LOW);
    digitalWrite(Fi, LOW);

    servo.write(135);
  }

  else if (svet > 75 && Pot12 < 25){
    digitalWrite(O, LOW);
    digitalWrite(T, LOW);
    digitalWrite(Th, LOW);
    digitalWrite(F, HIGH);
    digitalWrite(Fi, LOW);

    servo.write(180);
  }

  else{
    digitalWrite(O, LOW);
    digitalWrite(T, LOW);
    digitalWrite(Th, LOW);
    digitalWrite(F, LOW);
    digitalWrite(Fi, LOW);

    servo.write(0);
  }
}