J'ai fait l'acquisition de plusieurs DS3231 (module temps réel). J'ai suivi le tutoriel suivant : http://www.instructables.com/id/Real-time-clock-using-DS3231-EASY/?ALLSTEPS
Mais, il y a un décalage très visible de l'heure, en effet on perd environ une seconde par minute.
J'ai acquis ces modules en croyant résoudre les problème que j'avais avant sur mes modules DS1037 (mais peut-être est-ce le même problème ?).
#include
// Init the DS3231 using the hardware interface
DS3231 rtc(SDA, SCL);
void setup()
{
// Setup Serial connection
Serial.begin(115200);
// Uncomment the next line if you are using an Arduino Leonardo
//while (!Serial) {}
// Initialize the rtc object
rtc.begin();
// The following lines can be uncommented to set the date and time
//rtc.setDOW(WEDNESDAY); // Set Day-of-Week to SUNDAY
//rtc.setTime(12, 0, 0); // Set the time to 12:00:00 (24hr format)
//rtc.setDate(1, 1, 2014); // Set the date to January 1st, 2014
}
void loop()
{
// Send Day-of-Week
Serial.print(rtc.getDOWStr());
Serial.print(" ");
// Send date
Serial.print(rtc.getDateStr());
Serial.print(" -- ");
// Send time
Serial.println(rtc.getTimeStr());
// Wait one second before repeating :)
delay (1000);
}
J'ai essayé avec un deuxième module et l'erreur semble avoir disparu. Une erreur de fabrication ou un défaut...
Sinon, savez-vous comment on peut ajouté par exemple 10 secondes à l'heure ?
savez-vous comment on peut ajouté par exemple 10 secondes à l'heure ?
Vous avez une méthode de la librairie setTime(hour, min, sec);
Donc vous demandez l'heure, pour vous simplifiez la vie vérifiez que les secondes sont inférieures à 50 (sinon attendez 60-s secondes) et appelez la fonction setTime(h,m,s+10) (si vous êtes au desssus de 50 secondes vous passez à la minute suivante, peut être l'heure suivante, au jour suivant, au mois suivant, à l'année suivante, ça fait bcp de tests faire)
Sinon demander getUnixTime() qui est un temps en secondes, ajouter 10, régénérez la date et passez la à la RTC
Pour le premier, on me retourne un msg d'erreur comme quoi h n'existe pas (si j'allais plus loin on m'aurait dit que m et n'existe pas).
J'ai essayé le deuxième mais comme je m'y attendais getUnixTime n'existe pas non plus dans la librairie que j'ai installée. Après c'est l'histoire de générer l'heure au début que j'ai pas comprise.
Lisez l'heure dans une variable
Prenez l'heure dans une variable h
PRenz les minutes dans une variable m
Prenez les secondes dans une variable s
Testez s pour voir si < 50
Si oui appelez la fonction avec s+10
Dans le post #2 vous donnez un lien sur la librairie - il y a une doc associée...
Vous l'avez lue?
Au début de la doc il parle d'une structure
Variables: hour, min, sec: For holding time-data date, mon, year: For holding date-data dow: Day-of-the-week with Monday being the first day
Usage:Time t; // Define a structure named t of the Time-class
Un peu plus loin dans les fonctions de la librairie il y a une fonction getTime()
Get current data from the DS3231. Parameters: None Returns: Time-structure Usage: t = rtc.getTime(); // Read current time and date. --- Savez vous ce qu'est une structure en C ou C++ ? je vous suggère de creuser ce concept et de regarder les exemples de code qui sont aussi dans la librairie
Je connais les bases en C et C++, et je sais de quoi parle la librairie.
Mais, c'est ici les usages du code que je ne comprends pas.
J'ai écrit au début du code Time t; et j'ai écrit
t = rtc.getTime();
t=t+10;
Mais il y a un message d'erreur.
Je voudrais juste ajouter 10 secondes, c'est tout con mais je n'y parviens pas.
Et oui j'ai lu ce que j'ai trouvé (documentation et internet).
Je ne sais pas vraiment, j'ai écrit Time t; en dessous du define.
Mais repartons à zéro, dans mon code du début, que dois je rajouter pour afficher juste les secondes.
Time comme dit dans la doc est une structure (struct). Comme toute structure elle contient donc des éléments accessibles par leur nom de variables qui sont donnés dans la doc (cf mon post #10)
Variables: hour, min, sec: For holding time-data date, mon, year: For holding date-data dow: Day-of-the-week with Monday being the first day
Donc
Time t; // Define a structure named t of the Time-class
...
t = rtc.getTime(); // Read current time and date.
// ici t.sec, t.min, t.hour, t.year, t.mon, t.date, t.dow sont initialisés