Arzou
March 7, 2020, 11:47pm
1
Bonsoir,
voilà je patauge avec la gestion du temps/date sur arduino
j'ai bien compris que le temps est décompté depuis le 1/1/70 (sans le 1900??) stocké dans une variable genre Nom_ RTC "type double"
y a t-il un tuto ou des infos pour manipuler le temps/dates ,
mon but : prendre une date sous forme de variable "Nom_ RTC" et lui rajouter/retirer des secondes /minutes/heures/jours/mois
de pouvoir faire une comparaison pour déclancher une action
je n'arrive a rien
merci de votre aide
biggil
March 8, 2020, 3:54am
2
J'utilise RTClib
Cette bibliothèque possède 2 classes DateTime et TimeSpan qui savent faire tous les calculs possibles et imaginables (ou presque)
J-M-L
March 8, 2020, 6:54am
3
Oui +1 sur RTCLib et ses classes de gestion du temps
Ne pas acheter une DS1307 qui dérive rapidement, prendre une DS3231 par exemple
de pouvoir faire une comparaison pour déclancher une action
La classe DateTime de la RTClib comporte tous les opérateurs de comparaison <, <=, >, >=, == :
#include <RTClib.h>
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
void setup()
{
Serial.begin(115200);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (rtc.lostPower()) {
Serial.println("RTC lost power, lets set the time!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
Serial.println(__DATE__);
Serial.println(__TIME__);
}
}
unsigned long lastSec;
void loop()
{
DateTime dt(20, 3, 9, 11, 20, 30);
DateTime now = rtc.now();
if (lastSec != now.second()) {
lastSec = now.second();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.println(now.second(), DEC);
if (now == dt) {
Serial.println("ACTION !!!");
}
}
}
Ce code déclenche une action à l'heure dt.
Arzou
March 9, 2020, 10:24pm
5
Merci!!
j'ai intégré RTClib et adapté le code de hbachetti et ca marche!!
le petit sketch de test dans mon projet..
void test_ouverture()
{
DateTime now = rtc.now();
DateTime dt_lever(now.year(), now.month(), now.day(), Heure_lever.heure, Heure_lever.minutes, 10); // point de reference pour l'heure de lever solaire
DateTime dt_coucher(now.year(), now.month(), now.day(), Heure_coucher.heure, Heure_coucher.minutes, 10);// point de reference pour l'heure de coucher solaire
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("heure: ");
lcd.print(now.hour());
lcd.print(" : ");
lcd.print(now.minute());
lcd.print(" : ");
lcd.print(now.second());
lcd.setCursor(0,1 );
lcd.print("lever : ");
lcd.print(Heure_lever. heure);
lcd.print(" : ");
lcd.print(Heure_lever. minutes);
lcd.setCursor(0,2 );
lcd.print("coucher :");
lcd.print(Heure_coucher. heure);
lcd.print(" : ");
lcd.print(Heure_coucher. minutes);
if ((now >= dt_lever)&&(now <= dt_coucher)) // heure > heure lever solaire et < heure de coucher
{
Serial.println("ACTION lever !!!");
lcd.setCursor(0,3 );
lcd.print("ACTION lever !!!");
}
else
{
Serial.println("ACTION Fermer !!!");
lcd.setCursor(0,3 );
lcd.print("ACTION Fermer !!!");
}
}
Merci A vous!