IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

RTC DS1302 + écran I2C


Sujet :

Arduino

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 106
    Points : 26
    Points
    26
    Par défaut RTC DS1302 + écran I2C
    Bonjour à tous,

    J'ai une erreur sur un code récupéré sur internet pour réaliser une horloge et éventuellement l'adapter à un projet , je ne trouve pas la solution, l erreur affichée - expected unqualified-id before numeric constant sur cette ligne #define En_pin 2

    Si vous avez une idée

    Cordialement

    Stéphanie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    #include <Adafruit_LiquidCrystal.h>
     
    #include <LiquidCrystal_I2C.h>
     
    #include <virtuabotixRTC.h>
     
    #include <virtuabotixRTC.h> //Libraries needed
    #include <LiquidCrystal_I2C.h>
     
    #define I2C_ADDR 0x27 //LCD i2c stuff
    #define BACKLIGHT_PIN 3
    #define En_pin 2
    #define Rw_pin 1
    #define Rs_pin 0
    #define D4_pin 4
    #define D5_pin 5
    #define D6_pin 6
    #define D7_pin 7
     
    LiquidCrystal_I2C lcd(I2C_ADDR,16,2);En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
    //Wiring SCLK -> 6, I/O -> 7, CE -> 8
    //Or CLK -> 6 , DAT -> 7, Reset -> 8
     
    virtuabotixRTC myRTC(6, 7, 8); //If you change the wiring change the pins here also
     
     
     
     
    void setup() {
     Serial.begin(9600);
     lcd.begin (16,2); //Initialize the LCD
     lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
     lcd.setBacklight(HIGH);
     lcd.home ();
     myRTC.setDS1302Time(15, 31, 15, 5, 12, 1, 2018); //Here you write your actual time/date as shown above 
     //but remember to "comment/remove" this function once you're done as I did
     //The setup is done only one time and the module will continue counting it automatically
     
    }
     
    void loop() {
     lcd.clear(); //Here after clearing the LCD we take the time from the module and print it on the screen with usual LCD functions
     myRTC.updateTime();
     lcd.setCursor(0,0);
     lcd.print(myRTC.dayofmonth);
     lcd.print("/");
     lcd.print(myRTC.month);
     lcd.print("/");
     lcd.print(myRTC.year);
     lcd.setCursor(0,1);
     lcd.print(myRTC.hours);
     lcd.print(":");
     lcd.print(myRTC.minutes);
     lcd.print(":");
     lcd.print(myRTC.seconds);
     delay(1000);
    }

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 711
    Points : 5 390
    Points
    5 390
    Par défaut RTC DS1302 + ECRAN I2C
    (il serait bon d'utiliser les balises de code par respect des règles du forum)

    la ligne suivante est erronée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LiquidCrystal_I2C lcd(I2C_ADDR,16,2);En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
    vous avez la parenthèse fermante et le point virgule qui finissent de définir l'instance lcd de la classe LiquidCrystal_I2C et ensuite vous avez toute une ribambelle de valeurs hors contexte (qui doivent correspondre à l'usage d'un autre type d'initialization du LCD)

    il y a d'autres trucs louches, du genre inclure 2 fois virtuabotixRTC.h ou avoir 2 librairies LCD... faudrait faire du ménage.

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 106
    Points : 26
    Points
    26
    Par défaut
    Bonjour,

    Oui désolée pour les balises, j'ai fais le ménage, je mets le nouveau code qui se compile

    En vous remerciant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    #include <Adafruit_LiquidCrystal.h>
    #include <virtuabotixRTC.h>
    #include <LiquidCrystal_I2C.h>
     
    #define I2C_ADDR 0x27 //LCD i2c stuff
    #define BACKLIGHT_PIN 3
    #define En_pin 2
    #define Rw_pin 1
    #define Rs_pin 0
    #define D4_pin 4
    #define D5_pin 5
    #define D6_pin 6
    #define D7_pin 7
     
    LiquidCrystal_I2C lcd(I2C_ADDR,16,2);
    //Wiring SCLK -> 6, I/O -> 7, CE -> 8
    //Or CLK -> 6 , DAT -> 7, Reset -> 8
     
    virtuabotixRTC myRTC(6, 7, 8); //If you change the wiring change the pins here also
     
     
     
     
    void setup() {
     Serial.begin(9600);
     lcd.begin (16,2); //Initialize the LCD
     
     lcd.setBacklight(HIGH);
     lcd.home ();
     myRTC.setDS1302Time(15, 31, 15, 5, 12, 1, 2018); //Here you write your actual time/date as shown above 
     //but remember to "comment/remove" this function once you're done as I did
     //The setup is done only one time and the module will continue counting it automatically
     
    }
     
    void loop() {
     lcd.clear(); //Here after clearing the LCD we take the time from the module and print it on the screen with usual LCD functions
     myRTC.updateTime();
     lcd.setCursor(0,0);
     lcd.print(myRTC.dayofmonth);
     lcd.print("/");
     lcd.print(myRTC.month);
     lcd.print("/");
     lcd.print(myRTC.year);
     lcd.setCursor(0,1);
     lcd.print(myRTC.hours);
     lcd.print(":");
     lcd.print(myRTC.minutes);
     lcd.print(":");
     lcd.print(myRTC.seconds);
     delay(1000);
    }

  4. #4
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 711
    Points : 5 390
    Points
    5 390
    Par défaut
    Il compile - mais fait-il ce que vous voulez ?

    Vous n’avez sans doute pas besoin des 2 include pour LCD - gardez uniquement celle que vous utilisez.

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 106
    Points : 26
    Points
    26
    Par défaut RTC DS1302 + ECRAN I2C
    Bonjour,

    J'ai revu le code entiérement en m'aidant de tutos sur youtube, l'ensemble fonctionne, j ai l'affichage de l'heure et de la date sur le moniteur ainsi que sur l'écran lcd sauf que quand je débranche l'alimentation l'heure et la date sont correct sur le moniteur rien n'a été perdu mais sur l écran lcd l ensemble reprend la ou l affichage s'est arrété

    Le code pour vos avis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    #include <LiquidCrystal_I2C.h>
    LiquidCrystal_I2C lcd(0x27, 16, 2);
     
     
    #include <virtuabotixRTC.h> //Libraries needed
    virtuabotixRTC myRTC(6, 7, 8); //If you change the wiring change the pins here also
     
    void setup() {
    Serial.begin(9600);
    lcd.init ();
    lcd.backlight();
    //myRTC.setDS1302Time(00,58,6,6,15,9,2019); //Enlever // pour la première synchronisation
    }
    void loop() {
    myRTC.updateTime();
     
    Serial.print(" Date / heure : ");
    Serial.print(myRTC.dayofmonth); 
    Serial.print("/");
    Serial.print(myRTC.month);
    Serial.print("/");
    Serial.print(myRTC.year);
    Serial.print(" ");
    Serial.print(myRTC.hours);
    Serial.print(":");
    Serial.print(myRTC.minutes);
    Serial.print(":");
    Serial.println(myRTC.seconds);
     
    lcd.setCursor(0, 0);
    lcd.print("heure:");
    lcd.setCursor(8, 0);
    lcd.print(myRTC.hours);
    lcd.setCursor(10, 0);
    lcd.print(":  ");
    lcd.setCursor(11, 0);
    lcd.print(myRTC.minutes);
    lcd.setCursor(13, 0);
    lcd.print(":   ");
    lcd.setCursor(14, 0);
    lcd.print(myRTC.seconds);
    lcd.setCursor(0, 1);
    lcd.print("date:");
    lcd.setCursor(6, 1);
    lcd.print(myRTC.dayofmonth);
    lcd.setCursor(8, 1);
    lcd.print("/  ");
    lcd.setCursor(9, 1);
    lcd.print(myRTC.month);
    lcd.setCursor(11, 1);
    lcd.print("/  ");
    lcd.setCursor(12, 1);
    lcd.print(myRTC.year);
     
     
     
     delay(1000);
    }
    En vous remerciant

    Stéphanie

  6. #6
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 711
    Points : 5 390
    Points
    5 390
    Par défaut
    Citation Envoyé par Stéphanie13000 Voir le message
    Bonjour,sauf que quand je débranche l'alimentation l'heure et la date sont correctes sur le moniteur rien n'a été perdu mais sur l écran lcd l ensemble reprend la ou l affichage s'est arrêté
    Bonjour Stéphanie. Comme votre code envoie exactement les mêmes données au lcd et au port série, vous ne devriez pas avoir des infos différentes des deux côté

    expliquez de quelle alimentation vous parlez et comment le tout est alimenté et ce que vous enlevez comme alimentation + Donnez un exemple (texte) de ce que vous voyez sur la console série et le lcd (et si ça correspond à l’heure réelle). (Le texte déjà reçu dans la console est dans la mémoire de votre ordi, il n’est pas affecté par ce qui se passe de l’autre côté du câble usb - par contre suivant votre montage le lcd, la RTC etc dépendent de la présence du courant / tension et ont besoin d'être Proprement initialisés)

    Au passage précisez aussi de quelle RTC vous disposez. Est-ce bien une DS1302? Avez vous une batterie associée ?
    elles sont connues pour dériver fortement et ne pas être très fiables coté cristal et alimentation (cf https://playground.arduino.cc/Main/DS1302/ qui est à l’origine de la librairie que vous utilisez).

    Il vaut mieux acheter une RTC de type DS3231 qui a un cristal compensée en température et donc qui dérive beaucoup moins et utiliser par exemple la librairie Adafruit (fork de celle de JeeLab) qui vous donne en plus des classes pour travailler sur le temps.

  7. #7
    Membre émérite
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 012
    Points : 2 341
    Points
    2 341
    Par défaut
    Bonjour Stéphanie

    Citation Envoyé par Jay M Voir le message
    Il vaut mieux acheter une RTC de type DS3231 qui a un cristal compensée en température et donc qui dérive beaucoup moins et utiliser par exemple la librairie Adafruit (fork de celle de JeeLab) qui vous donne en plus des classes pour travailler sur le temps.
    Tout à fait d'accord avec Jay M, en plus le module DS3231 est en bus i2C donc se câble "avec" ton affichage i2C.

    Cela étant dit, j'ai testé ton programme (j'ai gratté mes fonds de tiroirs pour trouver un DS1302) j'ai, je crois, essayé toutes les manipulations possibles, je n'ai jamais eu des disparité entre ce qui est affiché sur le LCD et ce qui apparaît dans le moniteur??? Ce qui confirme ce que j'avais déjà constaté à la simple lecture du programme.

    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  8. #8
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 106
    Points : 26
    Points
    26
    Par défaut
    Bonjour jpbricole et Jay M,

    Ok pour le DS3231 je vais en commander un , en ce qui concerne le DS1302, je mets l'affichage de mon écran , l'heure est correcte sur le moniteur mais sur l'écran i2c il y a la date et l'heure d'hier quand j'ai débranché l alimentation usb sur mon pc

    Le DS1302 a une pile dessus qui conserve les données

    Merci pour votre aide

    Stéphanie

    Nom : Moniteur.jpg
Affichages : 2771
Taille : 88,2 KoNom : Moniteur.jpg
Affichages : 2771
Taille : 88,2 Ko

  9. #9
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 711
    Points : 5 390
    Points
    5 390
    Par défaut
    Bonjour stéphanie

    Vous ne nous avez pas dit comment est alimenté le montage électronique : uniquement par le cordon USB ou vous avez un transfo/alim sur la prise jack ?

    Si ce n’est qu’en USB:
    Quand vous enlevez l’USB de votre PC, votre montage UNO+RTC+LCD n’a plus d’alim et donc «meurt» et tout s’éteint. la RTC ayant sa pile continue à maintenir l’heure. Bien sûr si vous n’éteignez pas votre PC, tout ce qui a été transmis dans la console reste affiché, c’est dans la mémoire de l’ordinateur.

    Si vous rebranchez votre arduino sur USB, le courant revient et le programme recommence au setup(), ouvre la connexion Serial vers votre Ordinateur (vers le moniteur série déjà ouvert - ce qui va ou on ne va pas marcher suivant si le port com associé a changé ou pas)

    Si vous avez une alim jack sur l’arduino avec une tension suffisante, alors l’USB n’est pas utilisé pour alimenter l’arduino et enlever le câble USB ne fait tomber que la connexion série, vous devriez continuer à voir l’heure sur le LCD.

    Dernier point à clarifier - l’alimentation de votre RTC. se peut-il que la «pile» alimente aussi le montage arduino ?

    Pouvez vous reclarifier tout cela et ce qu’il se passe sur votre lcd exactement et quand ?

  10. #10
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 106
    Points : 26
    Points
    26
    Par défaut
    Bonjour Jay M,

    Le montage est alimenté par usb branché sur le pc
    A la premiére unitialisation , l affichage moniteur et lcd est le meme à quelques secondes prés, je débranche l usb attend un moment et quand je rebranche l usb seul le moniteur a conservé l heure mais le lcd non, il reprend la on s est arreté

    J espére avoir été plus clair
    en vous remerciant

    Stéphanie

  11. #11
    Membre émérite
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 012
    Points : 2 341
    Points
    2 341
    Par défaut
    Bonjour Stéphanie
    Citation Envoyé par Stéphanie13000 Voir le message
    l affichage moniteur et lcd est le meme à quelques secondes prés...
    Déjà ça...... Mystère .....
    Est-tu bien sûre d'avoir mis en ligne le code que tu utilises?

    Essayes celui-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    #include <LiquidCrystal_I2C.h>
    LiquidCrystal_I2C lcd(0x27, 16, 2);
     
     
    #include <virtuabotixRTC.h> //Libraries needed
    virtuabotixRTC myRTC(6, 7, 8); //If you change the wiring change the pins here also
     
    void setup() {
    	Serial.begin(9600);
    	lcd.init ();
    	lcd.backlight();
    	//myRTC.setDS1302Time(00,58,6,6,15,9,2019); //Enlever // pour la première synchronisation
    }
    void loop() {
    	myRTC.updateTime();
     
    	int rtcDayfmonth = myRTC.dayofmonth;
    	int rtcMonth = myRTC.month;
    	int rtcYear = myRTC.year;
    	int rtcHours = myRTC.hours;
    	int rtcMinuts = myRTC.minutes;
    	int rtcSeconds = myRTC.seconds;
     
    	Serial.print(" Date / heure : ");
    	Serial.print(rtcDayfmonth);
    	Serial.print("/");
    	Serial.print(rtcMonth);
    	Serial.print("/");
    	Serial.print(rtcYear);
    	Serial.print(" ");
    	Serial.print(rtcHours);
    	Serial.print(":");
    	Serial.print(rtcMinuts);
    	Serial.print(":");
    	Serial.println(rtcSeconds);
     
    	lcd.setCursor(0, 0);
    	lcd.print("heure:");
    	lcd.setCursor(8, 0);
    	lcd.print(rtcHours);
    	lcd.setCursor(10, 0);
    	lcd.print(":  ");
    	lcd.setCursor(11, 0);
    	lcd.print(rtcMinuts);
    	lcd.setCursor(13, 0);
    	lcd.print(":   ");
    	lcd.setCursor(14, 0);
    	lcd.print(rtcSeconds);
    	lcd.setCursor(0, 1);
    	lcd.print("date:");
    	lcd.setCursor(6, 1);
    	lcd.print(rtcDayfmonth);
    	lcd.setCursor(8, 1);
    	lcd.print("/  ");
    	lcd.setCursor(9, 1);
    	lcd.print(rtcMonth);
    	lcd.setCursor(11, 1);
    	lcd.print("/  ");
    	lcd.setCursor(12, 1);
    	lcd.print(rtcYear);
     
     
     
    	delay(1000);
    }
    A+
    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  12. #12
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 711
    Points : 5 390
    Points
    5 390
    Par défaut
    Salut @ jpbbricole

    Citation Envoyé par jpbbricole Voir le message
    Bonjour Stéphanie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ...
      myRTC.updateTime();	
      int rtcDayfmonth = myRTC.dayofmonth;
      int rtcMonth = myRTC.month;
      int rtcYear = myRTC.year;
      int rtcHours = myRTC.hours;
      int rtcMinuts = myRTC.minutes;
      int rtcSeconds = myRTC.seconds;
    ...
    je vois ce que vous avez en tête en dupliquant en mémoire locale que vous contrôlez les éléments calculés par la RTC - en vous disant qu'on ne sait pas forcément ce qu'il se passe dans la classe virtuabotixRTC

    Mais si vous allez voir la librairie en question, ce n'est pas nécessaire.

    En effet les variables d'instance sont dans la section publique de la classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
          uint8_t seconds; 
        uint8_t minutes; 
        uint8_t hours; 
        uint8_t dayofweek; 
        uint8_t dayofmonth; 
        uint8_t month;  
        int year;
    et la méthode updateTime() ne fait que les initialiser à la bonne valeur après un DS1302_clock_burst_read()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    id virtuabotixRTC::updateTime() { 
     
      DS1302_clock_burst_read( (uint8_t *) &rtc);               // Read all clock data at once (burst mode). 
     
      char buffer[80];       // the code uses 70 characters.
      seconds     = ( rtc.Seconds10  * 10 ) + rtc. Seconds; 
      minutes     = ( rtc. Minutes10 * 10 ) + rtc.Minutes;  
      hours       = ( rtc.h24.Hour10 * 10 ) + rtc.h24.Hour; 
      dayofweek   = ( rtc.Day );                            
      dayofmonth  = ( rtc.Date10  * 10 ) + rtc.Date;        
      month       = ( rtc.Month10 * 10 ) + rtc.Month;       
      year        = ( rtc.Year10  * 10 ) + rtc.Year + 2000;
    }
    donc en pratique (mis à part la promotion de type), dupliquer les données ne devrait absolument rien changer au comportement.

    l'explication de Stéphanie n'est pas claire quand elle parle de ce qu'elle voit (ou ne voit pas) sur son LCD...


    à suivre donc

  13. #13
    Membre émérite
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 012
    Points : 2 341
    Points
    2 341
    Par défaut
    Bonjour Jay M

    Citation Envoyé par Jay M Voir le message
    Mais si vous allez voir la librairie en question, ce n'est pas nécessaire.
    D'accord pour la théorie, mais pas du tout d'accord sur le fond!
    On est dans un forum consacré à l'Arduino, donc à une grande partie d'utilisateurs néophytes, donc expliquer quelque chose en allant lire le contenu d'une bibliothèque, pour moi, sort du contexte. Lire le contenu d'une bibliothèque et surtout comprendre, est à la portée d'un connaisseur en C ou C++ dont je ne fais pas partie.

    Mon intention, en créant ces variables, était de "concentrer" la prise des valeurs afin de démontrer, plus aisément, l'impossibilité de différences entre le moniteur et l'affichage.

    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  14. #14
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 711
    Points : 5 390
    Points
    5 390
    Par défaut
    Citation Envoyé par jpbbricole Voir le message
    Bonjour Jay M
    Mon intention, en créant ces variables, était de "concentrer" la prise des valeurs afin de démontrer, plus aisément, l'impossibilité de différences entre le moniteur et l'affichage.
    Tout a fait et je avais bien noté ce point dans mon introduction en disant que je comprenais l'objectif et ce que vous aviez en tête. (ie c'était pas polémique, juste de l'info complémentaire)

    Pour les débutants je ne pense pas qu'ils voient une vraie différence entre accéder une variable d'instance myRTC.dayofmonth ou dupliquer cette variable d'instance (et les potentielles bidouilles savantes que l'on peut faire sur les classes). Donc pas sûr que Stéphanie comprenne bien l'intention de votre code - il y avait déjà la même écriture dans le Serial.print que dans le LCD.print donc on devrait avoir (et on a) la même chose.

    Pour l'utilisateur avancé (j'ai noté qu'il y en avait sur le forum) ou ceux qui auraient envie d'aller creuser, on peut montrer que le code source d'une librairie n'est pas un truc compliqué et que l'on peut le regarder pour comprendre ce qu'il se passe. C'est un bon moyen pour se former pour ceux qui ont un peu de curiosité intellectuelle.

    Mais bon - je parle à la place de Stéphanie et en général - en pratique je n'en sais rien et ça dépend des cas. restons donc "prudent" et laissons là s'exprimer.

  15. #15
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 106
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par jpbbricole Voir le message
    Bonjour Stéphanie


    Déjà ça...... Mystère .....
    Est-tu bien sûre d'avoir mis en ligne le code que tu utilises?

    Essayes celui-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    #include <LiquidCrystal_I2C.h>
    LiquidCrystal_I2C lcd(0x27, 16, 2);
     
     
    #include <virtuabotixRTC.h> //Libraries needed
    virtuabotixRTC myRTC(6, 7, 8); //If you change the wiring change the pins here also
     
    void setup() {
    	Serial.begin(9600);
    	lcd.init ();
    	lcd.backlight();
    	//myRTC.setDS1302Time(00,58,6,6,15,9,2019); //Enlever // pour la première synchronisation
    }
    void loop() {
    	myRTC.updateTime();
     
    	int rtcDayfmonth = myRTC.dayofmonth;
    	int rtcMonth = myRTC.month;
    	int rtcYear = myRTC.year;
    	int rtcHours = myRTC.hours;
    	int rtcMinuts = myRTC.minutes;
    	int rtcSeconds = myRTC.seconds;
     
    	Serial.print(" Date / heure : ");
    	Serial.print(rtcDayfmonth);
    	Serial.print("/");
    	Serial.print(rtcMonth);
    	Serial.print("/");
    	Serial.print(rtcYear);
    	Serial.print(" ");
    	Serial.print(rtcHours);
    	Serial.print(":");
    	Serial.print(rtcMinuts);
    	Serial.print(":");
    	Serial.println(rtcSeconds);
     
    	lcd.setCursor(0, 0);
    	lcd.print("heure:");
    	lcd.setCursor(8, 0);
    	lcd.print(rtcHours);
    	lcd.setCursor(10, 0);
    	lcd.print(":  ");
    	lcd.setCursor(11, 0);
    	lcd.print(rtcMinuts);
    	lcd.setCursor(13, 0);
    	lcd.print(":   ");
    	lcd.setCursor(14, 0);
    	lcd.print(rtcSeconds);
    	lcd.setCursor(0, 1);
    	lcd.print("date:");
    	lcd.setCursor(6, 1);
    	lcd.print(rtcDayfmonth);
    	lcd.setCursor(8, 1);
    	lcd.print("/  ");
    	lcd.setCursor(9, 1);
    	lcd.print(rtcMonth);
    	lcd.setCursor(11, 1);
    	lcd.print("/  ");
    	lcd.setCursor(12, 1);
    	lcd.print(rtcYear);
     
     
     
    	delay(1000);
    }
    A+
    Cordialement
    jpbbricole
    Bonjour jpbricole,

    Et bien je viens de reprendre ton code ( qui me semblait être celui que j avais passé ) et tout marche normalement , le moniteur et l ecran sont bien synchronisés mais si je coupe leur alimentation, j attends un moment et lorsque je rebranche l ensemble j ai perdu l heure et celle qui est affichée sur l écran et celle du téléversement


    merci à toi et à Jay M, je ne suis pas à votre niveau de réflection

    Cordialement,

    Stéphanie

  16. #16
    Membre émérite
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 012
    Points : 2 341
    Points
    2 341
    Par défaut
    Salut Stéphanie

    As-tu refait une mise à l'heure au moyen de cette ligne?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	//myRTC.setDS1302Time(00,58,6,6,15,9,2019); //Enlever // pour la première synchronisation
    Mettre l'heure et la date, enlever la remarque (//) télécharger le sketch, remettre la remarque et re télécharger le sketch.

    As-tu un schéma de ton montage?

    A+
    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  17. #17
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 711
    Points : 5 390
    Points
    5 390
    Par défaut
    Citation Envoyé par Stéphanie13000 Voir le message
    ...mais si je coupe leur alimentation...
    Vous allez nous dire comment c’est alimenté et à quoi ressemble le montage ou pas ? 3 fois qu’on demande la même chose... perso je me lasse un peu là...

  18. #18
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 106
    Points : 26
    Points
    26
    Par défaut
    Bonjour,

    Mais je l'ai pourtant dis aussi, en USB sur PC

  19. #19
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 106
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par jpbbricole Voir le message
    Salut Stéphanie

    As-tu refait une mise à l'heure au moyen de cette ligne?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	//myRTC.setDS1302Time(00,58,6,6,15,9,2019); //Enlever // pour la première synchronisation
    Mettre l'heure et la date, enlever la remarque (//) télécharger le sketch, remettre la remarque et re télécharger le sketch.

    As-tu un schéma de ton montage?

    A+
    Cordialement
    jpbbricole
    Bonjour jpbbricole,

    Tu as trouvé, effectivement j enlevais // je mettais la bonne date et heure puis je téléversais, je retirais // mais je téléversais pas à nouveau

    pour le schéma tout simple

    RTC 1302

    vcc 5 v
    gnd
    clk 6
    dat 7 ( j ai vu que des fois il faut mettre une résistance de 1k , la je l'ai pas mise )
    rst 8

    i2c

    vcc
    gnd
    sda A4
    scl A5

    et le tout alimenté en usb par les pc ou une autre alim usb

    Maintenant il faut que je trouve un montage pour incluse cet horloge

    En te remerciant pour ton aide et ta patience

    Cordialement

    Stéphanie

  20. #20
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 711
    Points : 5 390
    Points
    5 390
    Par défaut
    Citation Envoyé par Stéphanie13000 Voir le message
    ,Mais je l'ai pourtant dis aussi, en USB sur PC
    Bonjour - Oui mais pas le montage... bon maintenant c’est clair que vous ne nous aviez pas tout dit sur le code utilisé / manipulations )

    La ligne qui est en commentaire sert à mettre à jour l’heure dans la RTC s’en utilisant l’heure de dernière compilation. Comme votre RTC a une pile, il suffit de le faire une seule fois - idéalement en compilant et téléchargeant immédiatement pour qu’il n’y ait pas trop de décalage entre la vraie heure et celle donnée à la RTC.

    Ensuite normalement (sauf au passage heure d’hiver:été si votre code ne le gère pas) vous n’aurez plus besoin de le faire. En pratique comme on la dit plus haut, cette RTC n’est pas très bonne et va dériver donc il faudra souvent la mettre à jour

Discussions similaires

  1. Horloge RTC I2C projet BAC
    Par younDLD dans le forum Arduino
    Réponses: 3
    Dernier message: 15/05/2016, 01h15
  2. Réponses: 17
    Dernier message: 17/10/2002, 20h06
  3. plein écran
    Par patapetz dans le forum OpenGL
    Réponses: 9
    Dernier message: 21/08/2002, 14h15
  4. Creer un écran de veille
    Par Willand dans le forum C++Builder
    Réponses: 2
    Dernier message: 09/08/2002, 12h36
  5. recuperer la résolution de l'écran
    Par florent dans le forum C++Builder
    Réponses: 11
    Dernier message: 07/06/2002, 15h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo