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 :

Incompatibilité Timer2 et horloge RTC DS3231 ?


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mars 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mars 2009
    Messages : 120
    Par défaut Incompatibilité Timer2 et horloge RTC DS3231 ?
    Bonjour,

    Je suis bloqué dans mon projet avec une apparente incompatibilité.

    J'ai besoin d'une interruption toutes les minutes pour effectuer la procédure « Ecriture() »
    J'utilise la librairie https://playground.arduino.cc/Main/MsTimer2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsTimer2::set(60000, Ecriture);
    Cela fonctionne très bien, merci.

    J'y ai besoin de la date et heure et j'ai donc une horloge RTC DS3231.

    J'ai une fonction qui fait merveille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void DateHeure() {
      DateTime now = rtc.now();
      sprintf (cDate, "%02d/%02d/%04d %02d:%02d:%02d", now.day(), now.month(), now.year(), now.hour(), now.minute(), now.second());
    }
    Elle place l'heure dans « char cDate[20]; » définie en haut.

    Mais quand je fais fonctionner les deux ensemble, l'Arduino plante et se fige.

    Le code :
    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
    // ########################################################################
    // RTC - horloge
     
    #include <Wire.h> //include Wire.h library
    #include "RTClib.h" //include Adafruit RTC library
    RTC_DS3231 rtc; //Make a RTC DS3231 object
     
    // ########################################################################
     
    // ########################################################################
    // Gestion de l'interruption du Timer 2 pour l'écriture du tableau toutes les minutes
    // https://playground.arduino.cc/Main/MsTimer2
     
    #include <MsTimer2.h>
     
    // ########################################################################
     
    char cDate[20]; //date et heure textuelle complète jj/mm/aaaa hh:mm:ss
     
    void setup() {
     
      Serial.begin(115200);//make it fast so it dumps quick!
     
      //========== RTC
      //Print the message if RTC is not available
      if (! rtc.begin()) {
        Serial.println("Couldn't find RTC");
        while (1);
      }
      //Setup of time if RTC lost power or time is not set
      if (rtc.lostPower()) {
        //Sets the code compilation time to RTC DS3231
        rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
      }  //==========
     
     
      //============= Interruption Timer2
      MsTimer2::set(10000, Ecriture); // Toutes les 10000 ms (10 secondes) lance la procédure Ecriture
      MsTimer2::start(); // Démarre le processus
      //==============
     
      DateHeure();
      Serial.println(cDate);
     
    }
     
    void loop() {
     
    }
     
    void DateHeure() {
      DateTime now = rtc.now();
      sprintf (cDate, "%02d/%02d/%04d %02d:%02d:%02d", now.day(), now.month(), now.year(), now.hour(), now.minute(), now.second());
    }
     
    void Ecriture() {
      DateHeure();
      Serial.println(cDate);
      Serial.println("Toto");
    }
    À vous lire

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Ce format fait 20 jj/mm/aaaa hh:mm:ss caractères. char cDate[20]; contient donc exactement le format mais il ne dispose pas d'un emplacement supplémentaire pour le caractère de fin de chaines '\0'. sprintf() écrit ce fameux 21e caractère (https://man.developpez.com/man3/printf/). A partir de là....

    char cDate[21]; devrait résoudre ton problème. Tu devrais toujours utiliser snprintf() pour pouvoir spécifier la taille de ton buffer de sortie.

Discussions similaires

  1. Horloge RTC I2C projet BAC
    Par younDLD dans le forum Arduino
    Réponses: 3
    Dernier message: 15/05/2016, 01h15
  2. Horloge Windows et horloge RTC
    Par bubu128 dans le forum C#
    Réponses: 3
    Dernier message: 01/04/2011, 16h32
  3. [horloge] conflit caractère / timer
    Par JeanJean dans le forum C
    Réponses: 10
    Dernier message: 09/05/2003, 23h47
  4. [VB6] [Interface] Horloge 7 segments
    Par selenay dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 07/10/2002, 16h15
  5. Connecter un serveur avec ADSL et RTC
    Par Sunny dans le forum Développement
    Réponses: 7
    Dernier message: 09/09/2002, 11h15

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