#include <Arduino.h>
#include "FS.h"
#include "SD.h"
#include "SPI.h"
#include "DHTesp.h"
#include "RTClib.h"
#include <Wire.h>
#define DHTpin 15
RTC_DS3231 rtc;   
DHTesp dht;

const int broche_CS = 5; 
unsigned long tempsPrecedent;

void appendFile(fs::FS &fs, const char * path, const char * message) {
  Serial.printf("Ecriture dans le fichier: %s\n", path);

  File file = fs.open(path, FILE_APPEND);
  if (!file) {
    Serial.println("Echec d'ouverture du fichier");
    return;
  }
  if (file.print(message)) {
    Serial.println("Fichier modifié avec succes.");
  } else {
    Serial.println("Echec de la modification du fichier.");
  }
  file.close();
}

void setup() {
  Serial.begin(9600);
  dht.setup(DHTpin, DHTesp::DHT11);
  if (!SD.begin(broche_CS)) {
    Serial.println("Carte SD introuvable");
    return;
  }
  else{
    Serial.println("Carte SD détectée");
  }
  if (! rtc.begin()) {
    Serial.println("RTC introuvable !");
    while (1);
  }
  if (rtc.lostPower()) {
    Serial.println("Veuillez regler l'heure sur le module RTC!");
  
    // Decommenter les lignes ci-dessous pour régler la date et l'heure.
    // La ligne ci-dessous regle la date et l'heure du momment de la compilation
    //rtc.adjust(DateTime(2020, 07, 20, 13, 24,00));
  
    // La ligne ci-dessous regle la date et l'heure avec des valeurs explicites
    // Par exemplepour le 27 janvier 2017 à 12:56 :
   //rtc.adjust(DateTime(2020, 20, 7, 16, 06, 30));
  }
  tempsPrecedent = millis();
}

void loop() {
DateTime now = rtc.now();

float humidity = dht.getHumidity();
float temperature = dht.getTemperature();
int jour = now.day();
int mois = now.month();
int annee = now.year();
int heure = now.hour();
int minute = now.minute();
char message[5000];

if ((millis() - tempsPrecedent) >= 5000) {
sprintf(message,"%d, %d, %d , %d, %d, %f, %f \n" ,annee, mois, jour, heure, minute, temperature, humidity);
appendFile(SD, "/Date_Heure_Temperature_Humidite.txt", message);
tempsPrecedent = millis();
}
}
