[DS1302] Reglage de l'heure

Bonjour,

Pour mon école, nous devons validé un projet de notre choix, nous avons choisi de créer une mini centrale domotique (gestion lumière et monitoring de température) ainsi que 3 capteurs de températures sans fil qui seront connecté via wifi.
Je suis chargé de la partie commande avec l’arduino, mon sketch pour le capteur de température (VMA320) que j’ai codé fonctionne très bien mais pas celui pour le module RTC (DS1302), j’obtiens toujours une date : “Date / Time: 0/0/0 0:0:0”

J’ai utilisé 3 librairies différentes :

  • RTClib (utilisé en premier test, je n’ai plus le sketch sous la main)

  • VirtuabotixRTC

#include <virtuabotixRTC.h>

#define DATA 2
#define CLK 7
#define CE 5 
  
virtuabotixRTC RTC(CLK,
           DATA,
           CE);
           
void setup() {
  Serial.begin(9600);

  RTC.setDS1302Time(00,15,14,4,1,6,2017);

}

void loop() {
  Serial.print("Current Date / Time: "); 
  Serial.print(RTC.dayofmonth); 
  Serial.print("/"); 
  Serial.print(RTC.month); 
  Serial.print("/");
  Serial.print(RTC.year);
  Serial.print(" ");
  Serial.print(RTC.hours);
  Serial.print(":");
  Serial.print(RTC.minutes);
  Serial.print(":");
  Serial.println(RTC.seconds);

  delay(3000);
}
  • DS1302 avec laquelle je ne parviens pas à compilé (‘tmElements_t’ was not declared in this scope line 46)

EDIT : après mise a jour avec la nouvelle librairies Timelib.h sur le repo Github je n’ai plus d’erreur de compilation

#include <DS1302RTC.h>
#include <Time.h>

// Set pins:  CE, IO,CLK
DS1302RTC RTC(5, 2, 7);

// Optional connection for RTC module
//#define DS1302_GND_PIN -1
//#define DS1302_VCC_PIN -1

void setup()
{

  // Setup Serial connection
  Serial.begin(9600);
  
  Serial.println("DS1302RTC Read Test");
  Serial.println("-------------------");
  
//   Activate RTC module
//  digitalWrite(DS1302_GND_PIN, LOW);
//  pinMode(DS1302_GND_PIN, OUTPUT);
//
//  digitalWrite(DS1302_VCC_PIN, HIGH);
//  pinMode(DS1302_VCC_PIN, OUTPUT);
//  
//  Serial.println("RTC module activated");
//  Serial.println();
//  delay(500);
  
  if (RTC.haltRTC()) {
    Serial.println("The DS1302 is stopped.  Please run the SetTime");
    Serial.println("example to initialize the time and begin running.");
    Serial.println();
  }
  if (!RTC.writeEN()) {
    Serial.println("The DS1302 is write protected. This normal.");
    Serial.println();
  }
  
  delay(5000);
}

void loop()
{
  tmElements_t tm;
  
  Serial.print("UNIX Time: ");
  Serial.print(RTC.get());

  if (! RTC.read(tm)) {
    Serial.print("  Time = ");
    print2digits(tm.Hour);
    Serial.write(':');
    print2digits(tm.Minute);
    Serial.write(':');
    print2digits(tm.Second);
    Serial.print(", Date (D/M/Y) = ");
    Serial.print(tm.Day);
    Serial.write('/');
    Serial.print(tm.Month);
    Serial.write('/');
    Serial.print(tmYearToCalendar(tm.Year));
    Serial.print(", DoW = ");
    Serial.print(tm.Wday);
    Serial.println();
  } else {
    Serial.println("DS1302 read error!  Please check the circuitry.");
    Serial.println();
    delay(9000);
  }
  
  // Wait one second before repeating :)
  delay (1000);
}

void print2digits(int number) {
  if (number >= 0 && number < 10)
    Serial.write('0');
  Serial.print(number);
}

Pourtant ce dernier code à déjà été utiliser par d’autre membres du forum sans soucis semble t-il. Je n’ai pas d’erreur de câblage (Vcc sur le +5 de l’arduino, GND sur le GND de l’arduino, I/O sur le pin 2, CE sur le 5 et CLK sur le 7).

Auriez-vous des pistes de travail ?

En attendant vos réponses avec impatience :grin:

Les différentes horloges sauvegardée de la société DallaS (Maxim actuellement) fonctionnent généralement sans difficultés.

Juste une question : il y a -t-il une pile de sauvegarde et est-elle en bon état ?

J'ai eu une fois un soucis sur la pile avec DS1307 --> il fonctionnait sans pile mais pas avec la pile livrée, avec une pile neuve tout est entré dans l'ordre.