Bonjour à tous,
Les problèmes se succedent mais ne se ressemblent pas.
On est sur un UNO 3 + Shield memoire DS1307 + Shield Deuligne .
Tout est presque dans le titre.
N'ayant pas besoin des secondes mais d'un rappel du bon fonctionnement de l'affichage j'ai placé un ":" entre heures et mn.
Le but est de faire clignoter ce double point au rhythme des secondes.
Certaines RTC ont une sortie interruption programmable. Là j'ai voulu faire simple avec le code qui suit.
J'ai volontairement placé le code de l'horloge dans une fonction car dans mon application principale c'est ainsi pour une question de clarté.
Ici je ne présente pour faire court que l'horloge.
Au départ tout va bien, la date et l'heure s'affichent, les ":" clignotent normalement mais au passage de la mn le caractère ":" se fige soit éteint soit visible mais reste bloqué. L'horloge continue à afficher normalement.
J'aurais pu aussi utliser l'instruction "millis" mais il m'a semblé plus logique de faire comme ça.
Si je place la routine de clignotement dans la fonction, ça ne fonctionne pas du tout.
A force je n'ai plus la tête claire et je fais appel à une âme charitable qui pourrait m'aider à débugger ou me proposer une solution plus fiable ou plus élégante voir intelligente. XD
/************************
* TEST DS1307
*
*
***********************************************************/
#include <Wire.h> // I2C library include
#include <Deuligne.h> // LCD library include
#include <RTClib.h> // Lib DS1307 horloge RTC
// --------------------- Déclaration des objets ------------------------
Deuligne lcd; // lcd object declaration Déclare Deuligne
RTC_DS1307 RTC; // Déclare Horloge
boolean flagS; // flag cligot secondes
byte currentsecond;
// *********************** SETUP ***********************
void setup() {
Serial.begin(9600);
Serial.print("JPJCB-V140414");
lcd.init(); // LCD init
lcd.clear(); // Clear Display
lcd.backLight(true); // Backlight ON
flagS = HIGH;
// following line sets the RTC to the date & time this sketch was compiled
// RTC.adjust(DateTime(__DATE__, __TIME__));
}
// *********************** MAIN LOOP ***********************
void loop() {
// ----- gestion clignotement ":" secondes
DateTime now = RTC.now(); Affich_heure();
if (now.second() - currentsecond >= 1) { currentsecond = now.second();
if (flagS == LOW) { flagS = HIGH; lcd.setCursor(12,0); lcd.print(":");
}
else { flagS = LOW; lcd.setCursor(12,0); lcd.print(" "); }
}
}
// **************** Fin de boucle ****************
// ------------------- Fonction heure ------------------
void Affich_heure(void)
{
DateTime now = RTC.now();
lcd.setCursor(3,0); // Curseur col 0, 2ème ligne
if (now.day() < 10) {lcd.print("0"); } // Affichage zéro
lcd.print(now.day(), DEC); // Affiche le jour du mois
lcd.print("/");
if (now.month() < 10) {lcd.print("0"); }
lcd.print(now.month(), DEC); // Affiche le mois
lcd.setCursor(10,0); // Cursor row 10, line 2
//--------------------
if (now.hour() < 10) {lcd.print("0"); }
lcd.print(now.hour(), DEC);
lcd.setCursor(13,0); //positionne le curseur pour le 0
if (now.minute() < 10) { lcd.print("0"); } // Affichage du zero en dessous de dix.
lcd.print(now.minute(), DEC);// Affiche minutes
}
// ************* Fin de programme **************