/**
   ESP32 + DHT22 Example for Wokwi
   
   https://wokwi.com/arduino/projects/322410731508073042
*/
#include "DHTesp.h"
const int DHT_PIN = 15;
const int heaterPin = 22;
const int uvcPin = 21;
const int systemSwPin = 14;
const int heaterSwPin = 13;
const int uvcSwPin = 12;
DHTesp dhtSensor;
TempAndHumidity  dhtData;
int sswVal = 1;
int hswVal = 1;
int uswVal = 1;
unsigned long preTime = 0;
unsigned long curTime = 0;
unsigned int timeInterval = 1000;
void setup() {
  Serial.begin(115200);
  dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
  pinMode(heaterPin, OUTPUT);
  pinMode(uvcPin, OUTPUT);
  pinMode(systemSwPin, INPUT_PULLUP);
  pinMode(heaterSwPin, INPUT_PULLUP);
  pinMode(uvcSwPin, INPUT_PULLUP);
  preTime = millis();
  curTime = millis();
  digitalWrite(heaterPin, hswVal);
  digitalWrite(uvcPin, uswVal);
}
void loop() {
  if ((curTime - preTime) < timeInterval) {
    curTime = millis();
  }
  else {
    preTime = curTime;
    dhtData = dhtSensor.getTempAndHumidity();
  }
  sswVal = digitalRead(systemSwPin);
  hswVal = digitalRead(heaterSwPin);
  uswVal = digitalRead(uvcSwPin);
  if (sswVal==LOW) {
    digitalWrite(heaterPin, LOW);
    digitalWrite(uvcPin, LOW);
  }
  else {
    if (hswVal == LOW) {
      digitalWrite(heaterPin, LOW);
    }
    else {
      if (dhtData.temperature < 40) {
        digitalWrite(heaterPin, HIGH);
      }
      else {
        digitalWrite(heaterPin, LOW);
      }
    }
    if (uswVal == LOW) {
      digitalWrite(uvcPin, LOW);
    }
    else {
      if (dhtData.temperature < 40) {
        digitalWrite(uvcPin, HIGH);
      }
      else {
        digitalWrite(uvcPin, LOW);
      }
    }
  }
  //Serial.println("System SW: " + String(sswVal) + " Heater SW: " + String(hswVal) + " UVC SW: " + String(uswVal));
  //Serial.println("Temp: " + String(dhtData.temperature, 2) + "°C");
  //Serial.println("Humidity: " + String(dhtData.humidity, 1) + "%");
  //Serial.println("---");
}