Mesure delai écoulé entre 2 dates rtclib.h+ sd.h?

bonjour,

en utilisant unixtime c plus pratique en effet

// fonctions reveil et sommeil


unsigned long reveil()  {
  // ecriture
  DateTime now = rtc.now(); // Clock call
  //now = rtc.now();  // quelle heure est-il?
  H_debout = now.unixtime(); // en secondes
  //H_debout = H_debout/10; // H_debout s incremente de 1 a chaque minute : a verifier

  Logfile = SD.open("sleep.txt", FILE_WRITE);
  Logfile.println();
  Logfile.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Logfile.print("   ");
  print2SD(now.day());
  Logfile.print("/");
  print2SD(now.month());
  Logfile.print("/");
  Logfile.print(now.year(), DEC);
  Logfile.print("; ");  // separateur excel
  print2SD(now.hour());
  Logfile.print(":");
  print2SD(now.minute());
  Logfile.print(":");
  
  // secondes a decommenter pour autres applications plus rapides
  /*Logfile.print(":");
  print2SD(now.second());
   * 
   */
  Logfile.println(" : JE SUIS DEBOUT ");
  Logfile.close();  // sauvegarde sd
  return (H_debout);
}

//fonction format 00
void print2SD(int value) {
  if (value >= 0 && value < 10) {
    Logfile.print("0");
  }
  Logfile.print(value, DEC);
}

void loop() {
  // a mettre dans les fonctions ?
  //DateTime now = rtc.now(); // Clock call
  //now = rtc.now();  // quelle heure est-il?
  // ?

  int dormir = digitalRead(bpdormir);  // appui bpdormir
  if ( dormir == 0 && lastdebout == 1) // condition initiale
  {
    lastdebout = 0; // je ne peux plus retourner dans le if
    // il faudra que j'aille dans le suivant
    // autant utiliser un while ????
    Serial.print(F(" DEBUT du sommeil "));
    Serial.println(F("je dors"));
    //Serial.println(H_debout);
    digitalWrite(ldr, 1);
    delay(100);// inutile juste par sécurité
    H_sommeil = sommeil(); // ok ecrit sur sd et retourne H_sommeil
    // Serial.println(H_sommeil);
    // delay led allumée : supprimer ces 2 lignes et la led
    // reste allumée tant qu'on dors
    delay(2000);
    digitalWrite(ldr, 0);

    // faire un if hdebout=0 hdebout= now.unixtime(); ?
    // c'est juste pour empecher au reset que le premier appui "je dors" il enregistre
    // j'ai été debout pendant xxxx ?
    //
    diff_Minutes = (H_sommeil - H_debout)/60; // au départ H_debout = 0
    Serial.print("j'ai ete debout pendant  ");
    Serial.print(diff_Minutes);
    Serial.println("   minutes ");
    heur = diff_Minutes / 60;
    minut = diff_Minutes % 60;
    //ecriture sd
    Logfile = SD.open("sleep.txt", FILE_WRITE); // on reouvre le fichier
    Logfile.print("j'ai ete debout pendant  ");
    Logfile.print(diff_Minutes);
    Logfile.println("   minutes ");
    Logfile.print(" soit : "); Logfile.print(heur); Logfile.print(" heures et "); Logfile.print(minut);
    Logfile.println(" minutes ");
    Logfile.close();

    //  mettre une interuuption ici déclenchée par appui sur bouton debout ?
  }

  // bouton debout
  int debout = digitalRead(bpdebout);
  if ( debout == 0 && lastdebout == 0)// si je n'ai pas été dans la boucle
    // if qui precéde lastdebout est à 1 donc l'appui est sans effet
  {
    lastdebout = 1; // je pourrai retourner dans le if dormir

    Serial.println(F("FIN du sommeil, il est temps de se lever"));
    // le serial print sert pour les tests
    digitalWrite(ldv, 1);
    delay(200);
    H_debout = reveil();  // ok retourne H_debout et ecrit sd

    diff_Minutes = (H_debout - H_sommeil)/60; //  le dénominateur pour convertir en minutes ? 60
    // les var H_xxx sont unixtime en secondes
    // pour le test pas de diviseur
    Serial.print("j'ai dormi durant : ");
    Serial.print(diff_Minutes);
    Serial.println("   minutes "); // on convertira en heures minutes pour l'affichage
    heur = diff_Minutes / 60;
    minut = diff_Minutes % 60;
    // la partie suivante pourrait aller dans la fonction reveil ?
    // en y ajoutant le cacul diff_Minutes, sauf que je ne vois pas comment H_sommeil arrivera
    // dans la fonction reveil ?
    Logfile = SD.open("sleep.txt", FILE_WRITE); // on reouvre le fichier
    Logfile.print("j'ai dormi pendant : ");
    Logfile.print(diff_Minutes);
    Logfile.println("   minutes ");
    Logfile.print(" soit : "); Logfile.print(heur); Logfile.print(" heures et : "); Logfile.print(minut);
    Logfile.println(" minutes ");
    Logfile.close();

    delay(2000);
    digitalWrite(ldv, 0);
  }


}  // end loop

il y a certainement plus simple comme écriture, j'ai 2 contraintes à modifier :
au premier appui "bpdormir" : çà écrit la diff_minut comme expliqué en commentaire
idem en cas de reset panne alim
-remplacer les 2 bp par un seul qui alternera les 2 fonctions

Merci pour m'avoir "aiguiller"