Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Arduino] problème avec le RTC

Sujet résolu
    30 mars 2019 à 15:45:54

    Bonjour, bonsoir à toutes et tous,

    Je viens demander un petit coup de main avec mon module RTC (un DS1307 avec  24C32 EEPROM).

    Il fonctionne sans problèmes, sauf lorsqu'il n'est plus alimenté par l'Arduino. Si je débranche ma carte et la rebranche quelques minutes plus tard il m'affichera l'heure à laquelle il s'est arrêté au lieu de l'heure actuelle.

    Au début je croyais que cela venait de la pile, mais elle est neuve :/
    J'ai ensuite cru que ça venait de mon code, mais j'ai fini par me convaincre que non après avoir cherché près de trois jours.

    En bref je suis bloqué et ne comprend pas pourquoi, quelqu'un pourrait m'aider à m'en sortir ? Ce n'est pas vraiment grave, je peut laisser ma carte sous tension vu qu'elle pilote d'autres capteurs mais j'aimerai savoir pourquoi il ne veux pas faire ce que je veux ^^

    Voici mon code, si c'est un truc que j'ai fait de travers, merci de me mettre sur la voie.

    #include <Wire.h>
    #include "RTClib.h"
    #include <LiquidCrystal_I2C.h>
    #include "DHT.h"
    
    #define DHTPIN 6
    #define DHTTYPE DHT11
    DHT dht(DHTPIN, DHTTYPE);
    
    RTC_DS1307 rtc;
    char daysOfTheWeek[7][12] = {"DIM","LUN","MAR","MER","JEU","VEN","SAM"};
    LiquidCrystal_I2C lcd(0x27,20,4);
    
    int pinRelais = 7;
    int bpDHT11 = 8;
    int valDHT;
    int valRTC;
    int bpRTC = 9;
    
    void setup(){
      lcd.init();
      lcd.init();
    
      rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    
      if(!rtc.begin()){
        lcd.setCursor(0,0);
        lcd.print("Couln'd find");
        lcd.setCursor(0,1);
        lcd.print("     RTC     ");
        while(1);
      }
      if(!rtc.isrunning()){
        lcd.setCursor(0,0);
        lcd.print("RTC lost power");
        lcd.setCursor(0,1);
        lcd.print("set the time");
        rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
      }
      dht.begin();
      pinMode(bpDHT11,INPUT);
      pinMode(bpRTC,INPUT);
      pinMode(pinRelais,OUTPUT);
    }
    
    void loop(){
      DateTime now = rtc.now();
    
      valDHT = digitalRead(bpDHT11);
      valRTC = digitalRead(bpRTC);
    
      if(valDHT == LOW){
        lcd.clear();
        lcd.noBacklight();
      }else{
        float humidite = dht.readHumidity();
        float temperature = dht.readTemperature();
        lcd.backlight();
        lcd.setCursor(0,0);
        lcd.print("HUMI: ");
        lcd.print(humidite);
        lcd.print("%");
        lcd.setCursor(0,1);
        lcd.print("TEMP ");
        lcd.print(temperature);
        lcd.print(" DEG ");
      }
      DateTime heureRTC;
      int heureDebut = 10;
      int heureFin = 20;
      if((now.hour() >= heureDebut) && (now.hour() <= heureFin)){
        digitalWrite(pinRelais,HIGH);
      }else{
        digitalWrite(pinRelais,LOW);
      }
    
      if(valRTC == LOW){
        lcd.clear();
        lcd.noBacklight();
      }else{
        lcd.backlight();
        lcd.setCursor(0,0);
        lcd.print(now.year(), DEC);
        lcd.print('/');
        lcd.print(now.month(), DEC);
        lcd.print('/');
        lcd.print(now.day(), DEC);
        lcd.print(" (");
        lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
        lcd.print(") ");
        lcd.setCursor(0,1);
        lcd.print(now.hour(), DEC);
        lcd.print(':');
        lcd.print(now.minute(), DEC);
        lcd.print(':');
        lcd.print(now.second(), DEC);
        delay(1000);
      }
    }


    Merci d'avance pour vos conseils.

    • Partager sur Facebook
    • Partager sur Twitter
      31 mars 2019 à 10:58:23

      La fonction rtc.adjust (ligne 24) permet de mettre à l'heure le RTC.

      Quand aux constantes __DATE__ et __TIME__ que tu utilises pour cette mise à l'heure, le compilateur les remplace automatiquement par la date et l'heure actuel à lors de la compilation.

      Vu que tu fais ce rtc.adjust dans fonction la fonction setup, cela va faire une remise à l'heure à chaque démarrage de la carte arduino.

      Donc non, ton RTC fonctionne très bien et continu d'incrémenter l'heure pendant que la carte arduino est débranchée.

      En revanche, c'est ton code qui vient changer l'heure à la remise sous tension.

      Maintenant que ton RTC est à l'heure, il te faut supprimer cette ligne rtc.adjust ;)

      -
      Edité par lorrio 31 mars 2019 à 10:59:42

      • Partager sur Facebook
      • Partager sur Twitter
        31 mars 2019 à 20:04:35

        Donc si je résume bien, je ne met mon rtc.adjust() lors du premier démarrage et ensuite je renvoie le programme après l'avoir retiré.
        Ça fonctionne nickel ! =)

        Merci pour l'info lorrio =)

        • Partager sur Facebook
        • Partager sur Twitter

        [Arduino] problème avec le RTC

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown