[Résolu] Comment stocker une heure dans une variable avec une RTC

Bonjour bonjour,

Je débute en Arduino et ai besoin de coder pour un projet. J'utilise une RTC D1307 et une carte mega 2560.
En gros on doit faire un distributeur automatique de nourriture pour chats qui distribue des croquettes avec un intervalle minimum de 6h entre deux distributions.

Il faut que je trouve un moyen de stocker une heure dans une variable (heure, minutes, secondes, le tout en secondes), de lui ajouter 21600s (6h) et de regarder si ça dépasse, ou pas, l'heure actuelle.

J'ai essayé de bidouiller des trucs mais ça marche pas. Au début j'ai mit double parce que je sais pas quel type de variable mettre mais c'est pas grave, c'est pas le plus important pour l'instant haha.

// Date and time functions using a DS1307 RTC connected via I2C and Wire lib

#include <Wire.h>
#include "RTClib.h"
double HeureRepas=0;

RTC_DS1307 rtc;

void setup () {
  
  Serial.begin(57600);
#ifdef AVR
  Wire.begin();
#else
  Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due
#endif
  rtc.begin();

  if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
  }
}

void loop () {
    DateTime now = rtc.now();
    
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    
    Serial.print(" since midnight 1/1/1970 = ");
    Serial.print(now.unixtime());
    Serial.print("s = ");
    Serial.print(now.unixtime() / 86400L);
    Serial.println("d");

    now.hour*3600+now.minute*60+now.second=HeureRepas;
}

Dans la dernière ligne j'essaye de stocker l'heure actuelle dans une variables mais ça ne compile pas. Quelqu'un pourrait m'aider?

Bonjour,

Peut-être avec:

HeureRepas= now.hour3600+now.minute60+now.second;

Bonjour,
Double est un type non approprié pour HeureRepas Unsigned long est mieux adapté avec 2^32-1 valeur.

Et pour affecter une valeur à une variable c'est:

variable = valeur

tu peux remarquer que ton heure est déjà stockée dans une variable, c'est la variable now qui est un objet de la class DateTime (cette classe est fournie par la RTClib que tu utilises)
Tu as intérêt à regarder l'interface de cette classe (c-à-d les services qu'elle propose, voir le fichier RTClib.h), elle sait faire plein de choses intéressantes (éviter de réinventer la roue :slight_smile: )

D'accord merci beaucoup à vous trois j'essairai ça

Salut ,

ca serait pas plus simple de faire un truc dans le genre :

// Date and time functions using a DS1307 RTC connected via I2C and Wire lib

#include <Wire.h>
#include "RTClib.h"
double HeureRepas=0;

RTC_DS1307 rtc;

void setup () {
 
  Serial.begin(57600);
#ifdef AVR
  Wire.begin();
#else
  Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due
#endif
  rtc.begin();

  if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
  }
  Heure_Repas = now.unixtime(); // premier repas
}

void loop () {
	 
	Next_Heure_Repas = Heure_Repas + 21600 ;
	// le deuxieme repas sera donc a : Heure_Repas + 21600 sec , et donc faire une comparaison toute simple genre :
if ( now.unixtime() < Next_Heure_Repas ) { // on ne fait rien car les 6 heures ne sont pas encore ecoulées
}
else { // les 6 heures sont ecoulées , le chat peut enfin se regaler ^^ !
	Heure_Repas = Next_Heure_Repas;
}	

}