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"