//Created by Barbu Vulc!
//This is an automation project for a co-generation power plant (gas turbine).
//Libraries:
#include <Servo.h>
#include <DHT.h>
// Definire tip senzor DHT
#define DHTTYPE DHT22
// Declarații pentru servomotoare
Servo servoC1;  // Clapeta către atmosferă
Servo servoC2;  // Clapeta către circuitul tur-retur
// Pinuri senzor și servomotor
const int pinDHTTur = 2;   // Pin DHT22 pentru temperatura tur
const int pinDHTRetur = 3; // Pin DHT22 pentru temperatura retur
const int pinServoC1 = 9;
const int pinServoC2 = 10;
// Praguri de temperatură
const float pragMinTur = 75.0; // Prag minim temperatură pe tur
const float pragMaxTur = 85.0; // Prag maxim temperatură pe tur
// Obiecte DHT pentru fiecare senzor
DHT dhtTur(pinDHTTur, DHTTYPE);
DHT dhtRetur(pinDHTRetur, DHTTYPE);
// Variabile pentru poziția servomotoarelor
const int pozitieDeschis = 90; // Poziția deschis (90 de grade)
const int pozitieInchis = 0;   // Poziția închis (0 grade)
void setup() {
  // Inițializare DHT
  dhtTur.begin();
  dhtRetur.begin();
  // Atașare servomotoare
  servoC1.attach(pinServoC1);
  servoC2.attach(pinServoC2);
  // Setare poziții inițiale
  servoC1.write(pozitieInchis);
  servoC2.write(pozitieInchis);
  // Inițializare comunicare serială (pentru debugging)
  Serial.begin(9600);
}
void loop() {
  // Citire temperaturi de la DHT22
  float tempTur = citireTemperaturaDHT(dhtTur);
  float tempRetur = citireTemperaturaDHT(dhtRetur);
  // Debugging - afișare temperaturi
  Serial.print("Temp Tur: ");
  Serial.print(tempTur);
  Serial.print(" °C, Temp Retur: ");
  Serial.print(tempRetur);
  Serial.println(" °C");
  // Control clapete în funcție de temperatură
  if (tempTur < pragMinTur) {
    // Deschide circuit tur-retur, închide atmosferă
    servoC1.write(pozitieDeschis);
    servoC2.write(pozitieDeschis);
  } else if (tempTur > pragMaxTur) {
    // Deschide evacuare în atmosferă, închide circuit tur-retur
    servoC1.write(pozitieInchis);
    servoC2.write(pozitieInchis);
  }
  // Pauză pentru stabilizare
  delay(2000); // DHT22 necesită o citire la fiecare 2 secunde
}
// Funcție pentru citirea temperaturii de la un senzor DHT
float citireTemperaturaDHT(DHT &senzor) {
  float temperatura = senzor.readTemperature();
  if (isnan(temperatura)) {
    Serial.println("Eroare citire senzor DHT!");
    return -100.0; // Valoare de eroare
  }
  return temperatura;
}