/*2018-09 Arduino28-FROID-Contrler une lectrovanne par le biais d'une valeur CONSIGNE et d'un DIFFERENTIEL
 * Chaine Youtube : https://www.youtube.com/playlist?list=PLF88SKt6r7NbK8nCD7TxUbKJJFv1fcR_Z
 * Blog : https://www.e-genieclimatique.com/arduino03-apprendre-lautomatisme-et-la-programmation-avec-larduino-et-e-genieclimatique/
 * bout de code pour faire changer l'tat d'une sortie suivant une valeur de CONSIGNE et une valeur de DIFFERENTIEL 
 */

const int EntreeANATemp = A0;
const int Electrovanne = 2;

float Consigne = 27.0; // valeur consigne rgulateur en C
float Differentiel = 2.0 ; // valeur du diffrentiel en K ( l'hysterisis)

void setup() {
  Serial.begin(9600);
  pinMode(Electrovanne, OUTPUT);
}

void loop() {

  int ValeurEntreeAnaA0 = analogRead(EntreeANATemp);

  //Convertir la valeur de l'entre ANA en degr Celsius

  const float a = (5.0 - 0.0) / (1023.0 - 0.0); //calcul du coefficient directeur float n'affiche que 2 chiffres aprs la virgule dans le moniteur srie

  const float aTMP36 = (125 - 25) / (1.75 - 0.75); // calcul du coefficient directeur pour le capteur de temprature
  const float b = 125 - (aTMP36 * 1.75);

  float Tension = a * ValeurEntreeAnaA0; // y=ax+b calcul de la valeur de tension
  float DegreCelsius = (aTMP36 * Tension) + b;

  Serial.print("valeur du capteur :");
  Serial.print(ValeurEntreeAnaA0);

  Serial.print(" en volts :");
  Serial.print(Tension);

  Serial.print(" en degr Celsius :");
  Serial.print(DegreCelsius);

  //Contrle de l'lectrovanne

  if (DegreCelsius > Consigne) {
    digitalWrite(Electrovanne, HIGH);
    Serial.print(" EV OUVERTE ");

  } else if (DegreCelsius > Consigne - Differentiel && DegreCelsius <= Consigne) {
    Serial.print(" DIFFERENTIEL ");

  } else if (DegreCelsius <= Consigne - Differentiel) {
    digitalWrite(Electrovanne, LOW);
    Serial.print(" EV FERMEE");
  }

  Serial.println(" ETAT ");
  delay(50);
}