[HELP] Heure persistante sur LCD

J'ai un petit problème avec mon Arduino Uno r3.
J'ai un un RTC DS1307 ainsi qu'un Hitachi HD 44780 en Adafruit RGB.
J'ai déja flashé l'horloge et son affichage sur le LCD,mais ce dernier ne marche pas correctement : J'ai un système " JJ/MM/AAAA HH/MM ",sauf que quand on passe à l'heure d'après,pendant les 10 minutes qui suivent,le 9 du " 59 Minutes " reste.
Un moyen de m'aider,par hasard ? :disappointed_relieved:
Les secondes ne sont pas affichées car cela prendrait trop de place pour le moment.

  • Le programme :
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib

#include <Wire.h>
#include "RTClib.h"
#include <Adafruit_MCP23017.h>
#include <Adafruit_RGBLCDShield.h>
Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();


RTC_DS1307 rtc;

void setup () 
{
  Serial.begin(9600);
 Wire.begin();
 lcd.begin(16,2);
 lcd.setBacklight(0x07);
 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(__DATE__, __TIME__));
  }
}

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.println();
    
    lcd.setCursor(0, 0);
    
    lcd.print(now.day(), DEC);
    lcd.print('/');
   lcd.print(now.month(), DEC);
    lcd.print('/');
    lcd.print(now.year(), DEC);
    lcd.print(' ');
    lcd.print(now.hour(), DEC);
    lcd.print(':');
    lcd.print(now.minute(), DEC);
    //lcd.print(':');
    //lcd.print(now.second(), DEC);
    
    delay(2000);
}

JackySandvich:
J'ai un petit problème avec mon Arduino Uno r3.
J'ai un un RTC DS1307 ainsi qu'un Hitachi HD 44780 en Adafruit RGB.
J'ai déja flashé l'horloge et son affichage sur le LCD,mais ce dernier ne marche pas correctement : J'ai un système " JJ/MM/AAAA HH/MM ",sauf que quand on passe à l'heure d'après,pendant les 10 minutes qui suivent,le 9 du " 59 Minutes " reste.
Un moyen de m'aider,par hasard ? :disappointed_relieved:
Les secondes ne sont pas affichées car cela prendrait trop de place pour le moment.

bonjour
surement un probleme de positionnement de curseur
entre 0 et 9 minutes le LCD affiche les minutes sur une seule position sans effacer le 9 de 59 minutes
en theorie tu devrais avoir le meme probleme avec les heures entre 0 et 9

pas beau , mais juste pour test essaye :grin:

lcd.setCursor(0, 0);
    lcd.print("                "); // pour test
lcd.setCursor(0, 0); // pour test 
    lcd.print(now.day(), DEC);
    lcd.print('/');
   lcd.print(now.month(), DEC);
    lcd.print('/');
    lcd.print(now.year(), DEC);
    lcd.print(' ');
    lcd.print(now.hour(), DEC);
    lcd.print(':');
    lcd.print(now.minute(), DEC);
    //lcd.print(':');
    //lcd.print(now.second(), DEC);
    
    delay(2000);
}

Tu auras le même problème avec le jour et le mois lorsqu'il seront inférieur à 10.
Tu devrais ajouter une petite fonction à laquelle tu passerais en argument le nombre à afficher et qui te retournerait une chaîne de caractères correctement formatée (ajout du zéro en tête si <10)

salut
un truc comme ça :

 lcd.setCursor(0,0);
        if (heure < 10)
          {
            lcd.print("0");
          }
        lcd.print(heure);
        lcd.print(":");
        if (minute < 10)
          {
            lcd.print("0");
          }
        lcd.print(minute);

voili voilà !

Ou ça:

// DS 1307 Time declarations
typedef enum clock__members
{   clock__MemberDay,
    clock__MemberMonth,
    clock__MemberYear,
    clock__MemberHour,
    clock__MemberMinute,
    clock__MemberSecond
} clock__member_t;

static void clock__printDatetime();
static RTC_DS1307  clock__rtc;
static DateTime clock__currentTime;

///// SETUP /////
void setup() {
// Initialize RTC.
       clock__rtc.begin();
       delay(10);
   //clock__rtc.adjust(valeurs à mettre); // update RTC DS 1307 Clock
}

///// MAIN PROG /////
void loop(){
 clock__currentTime = clock__rtc.now();
 clock__printDatetime();
}

static void clock__printDatetime(){
    // Build date string
    char date[] = "XX/XX/XXXX";
    snprintf
    (
        date,
        strlen(date) + 1,
        "%02d/%02d/%04d",
        clock__currentTime.day(),
        clock__currentTime.month(),
        clock__currentTime.year()
    );
    
    // Build time string
    char time[] = "00:00:00";
    snprintf
    (
        time,strlen(time) + 1,
        "%02d:%02d:%02d",
        clock__currentTime.hour(),
        clock__currentTime.minute(),
        clock__currentTime.second()
    );
    
    // Print date
    lcd.setCursor(3, 0);
    lcd.print(date);
    
    // Print time
    lcd.setCursor(4, 1);
    lcd.print(time);
}

:grin:

déjà un truc bête, tu affiche toutes les 2s avec ton delay, charche l'erreur pour avoir chaque seconde.

sinon tu peux faire encore plus simple, j'ai pas la lib sous les yeux
pas dit que ca flashe un peu

lcd.clear;
lcd..........

delay(1000);