

#include <DS3231.h>   //RTC DS3231 by andrew wickert
#include <Wire.h>

/*****************************************************************
   Déclaration des Capteurs
 *****************************************************************/
//relay Lumiere
const int Haut      = 2;
const int Bas       = 3;

//relay Ventilation
const int Ventil  = 4;

//relay Arrosage
const int Arro    = 5;

/*
//Interrupteur
const int interLumBas  = 6; //inter Lumiere bas ON/OFF
const int interLumOff  = 7; //inter Lumiere OFF
const int interVentAuto  = 8; //inter Ventilation ON/Auto
const int interVentOff  = 9; //inter Ventilation OFF
const int interArroAuto  = 10;//inter Arro ON/Auto
const int interArroOff  = 11;//inter Arro OFF
const int inter7  = 12;*/

//RTC
DS3231 Clock;

/*****************************************************************
   Déclaration des Variables globals
 *****************************************************************/

//Variable lumiere
int newDay = 1; // Variable pour savoir si nouveau jour.
int HA;  //heure allumage en minute
int HE;  //heure extinction en minute (Ha +18H +/-15min)

//Variable Extraction
int tmpExtract, humExtract;
int extract;

//Variabe Arrosage
const int delaySecArrosage = 20;
int HeuArrosage;
int jourArrosage = 1;
/***********************************************************************
     Setup
 **********************************************************************/

void setup() {
  Serial.begin(9600);

  /***********************************************************************
    init des pins
  * *********************************************************************/
  //PIN Lumiere
  pinMode(Haut, OUTPUT);
   digitalWrite(Haut, HIGH);
  pinMode(Bas, OUTPUT);
   digitalWrite(Bas, HIGH);

  //Pin ventilation
  pinMode(Ventil, OUTPUT);
   digitalWrite(Ventil, HIGH);

  //Pin Arrosage
  pinMode(Arro, OUTPUT);
   digitalWrite(Arro, HIGH);

/*
  //interupteur
  pinMode(interLumBas, INPUT);
  pinMode(interLumOff, INPUT);
  pinMode(interVentAuto, INPUT);
  pinMode(interVentOff, INPUT);
  pinMode(interArroAuto, INPUT);
  pinMode(interArroOff, INPUT);
  pinMode(inter7, INPUT);*/


  /***********************************************************************
    init des capteurs
  * *********************************************************************/

  //RTC
  Wire.begin();
}

void loop() {

  /***********************************************************************
    Gestion des capteurs
  * **********************************************************************/

  //RTC
  bool h24, am;
  int heure = Clock.getHour(h24, am );
  int minu = Clock.getMinute();
   
  int HMin = heure * 60 + minu; // heure en minute
  Serial.println(HMin);

  /***********************************************************************
    Gestion de la lumiere
   * *********************************************************************
  */
  if (newDay == 1) {
    newDay = 0;
    HA = random (585, 615);
    HE = HA + 1065 + random(30);
  }

  if (HMin == 0) {
    jourArrosage =1;
    newDay = 1;
  }

  if (HMin >= HA & HMin < HE) { //On met en route si on est dans le temps et que l'inter2 est en allumé
   // if (interLumBas) {
      Serial.println("Double lumiere ON");
      digitalWrite(Bas, LOW);
      digitalWrite(Haut, LOW);
    }
    /*else {
      Serial.println("Lumiere haut ON");
      digitalWrite(Haut, LOW);
    }
  }*/
  else {
    Serial.println("Lumiere Eteint");
    digitalWrite(Bas, HIGH);
    digitalWrite(Haut, HIGH);
  }


  /***********************************************************************
    Gestion de l'extraction
  * *********************************************************************/
  if (minu >= 50) {
    Serial.println("Extracteur ON");
    digitalWrite(Ventil, LOW);
  }
  else {
    Serial.println("Extracteur OFF");
    digitalWrite(Ventil, HIGH);
  }

  /***********************************************************************
    Gestion de l'arrosage
  * *********************************************************************/
  if (HMin == 1018 & jourArrosage) {
    jourArrosage = 0;
    Serial.println("arro ON");
    digitalWrite(Arro, LOW);
    delay(40000);
    digitalWrite(Arro, HIGH);
     Serial.println("arro Off");
    
  }





  delay(10000);
}
