Erreurs codes sur ds1302

bonjour.

pourriez vous m'aider avec mon code. cela est la premiere fois que j'utilise un module ds1302 et je ne comprend pas encore trop les message d'erreur géneré pourriez vous m'aider a les décrypter:

C:\Users\alexi\AppData\Local\Temp\.arduinoIDE-unsaved2025514-23532-dik3g.0t27a\sketch_jun14a\sketch_jun14a.ino: In function 'void setup()':
C:\Users\alexi\AppData\Local\Temp\.arduinoIDE-unsaved2025514-23532-dik3g.0t27a\sketch_jun14a\sketch_jun14a.ino:37:6: error: 'class DS1302' has no member named 'setDOW'
  rtc.setDOW(SATURDAY);
      ^~~~~~
C:\Users\alexi\AppData\Local\Temp\.arduinoIDE-unsaved2025514-23532-dik3g.0t27a\sketch_jun14a\sketch_jun14a.ino:37:13: error: 'SATURDAY' was not declared in this scope
  rtc.setDOW(SATURDAY);
             ^~~~~~~~
C:\Users\alexi\AppData\Local\Temp\.arduinoIDE-unsaved2025514-23532-dik3g.0t27a\sketch_jun14a\sketch_jun14a.ino:38:6: error: 'class DS1302' has no member named 'setTime'; did you mean 'time'?
  rtc.setTime(17, 17, 0);
      ^~~~~~~
      time
C:\Users\alexi\AppData\Local\Temp\.arduinoIDE-unsaved2025514-23532-dik3g.0t27a\sketch_jun14a\sketch_jun14a.ino:39:6: error: 'class DS1302' has no member named 'setDate'
  rtc.setDate(14, 06, 2025);
      ^~~~~~~
C:\Users\alexi\AppData\Local\Temp\.arduinoIDE-unsaved2025514-23532-dik3g.0t27a\sketch_jun14a\sketch_jun14a.ino: In function 'void loop()':
C:\Users\alexi\AppData\Local\Temp\.arduinoIDE-unsaved2025514-23532-dik3g.0t27a\sketch_jun14a\sketch_jun14a.ino:44:20: error: 'class DS1302' has no member named 'getHours'
  currentHour = rtc.getHours();
                    ^~~~~~~~
C:\Users\alexi\AppData\Local\Temp\.arduinoIDE-unsaved2025514-23532-dik3g.0t27a\sketch_jun14a\sketch_jun14a.ino:45:22: error: 'class DS1302' has no member named 'getMinutes'
  currentMinute = rtc.getMinutes();
                      ^~~~~~~~~~
C:\Users\alexi\AppData\Local\Temp\.arduinoIDE-unsaved2025514-23532-dik3g.0t27a\sketch_jun14a\sketch_jun14a.ino:46:22: error: 'class DS1302' has no member named 'getSeconds'
  currentSecond = rtc.getSeconds();
                      ^~~~~~~~~~
exit status 1

Compilation error: 'class DS1302' has no member named 'setDOW'

et voici le code en question:

// Inclure les bibliothèques nécessaires
#include <DS1302.h> // Bibliothèque pour le module DS1302
#include <LiquidCrystal.h> // Bibliothèque pour l'écran LCD 1602A
#include <DHT.h> // Bibliothèque pour le capteur DHT11

// Définir les broches pour le module DS1302
#define DS1302_CLK 2
#define DS1302_DAT 3 
#define DS1302_RST 4

// Définir les broches pour le relais et le bouton
#define RELAY_PIN 5
#define BUTTON_PIN 6

// Définir les broches pour le capteur DHT11
#define DHT_PIN 7

// Initialiser les objets pour le module DS1302, l'écran LCD et le capteur DHT11
DS1302 rtc(DS1302_CLK, DS1302_DAT, DS1302_RST);
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
DHT dht(DHT_PIN, DHT11);

// Variables pour stocker l'heure actuelle et l'état du bouton
int currentHour, currentMinute, currentSecond;
int buttonState;

void setup() {
 // Définir la broche du relais comme sortie
 pinMode(RELAY_PIN, OUTPUT);
 // Définir la broche du bouton comme entrée
 pinMode(BUTTON_PIN, INPUT);
 // Initialiser l'écran LCD
 lcd.begin(16, 2);
 // Définir l'heure initiale du module DS1302
 rtc.writeProtect(false);
 rtc.halt(false);
 rtc.setDOW(SATURDAY);
 rtc.setTime(17, 17, 0);
 rtc.setDate(14, 06, 2025);
}

void loop() {
 // Obtenir l'heure actuelle du module DS1302
 currentHour = rtc.getHours();
 currentMinute = rtc.getMinutes();
 currentSecond = rtc.getSeconds();
 // Obtenir l'état du bouton
 buttonState = digitalRead(BUTTON_PIN);

 // Vérifier s'il est temps d'activer la pompe
 if (currentHour == 21 && currentMinute == 0 && currentSecond == 0) {
   // Activer la pompe en allumant le relais
   digitalWrite(RELAY_PIN, HIGH);
   // Attendre 5 minutes
   delay(300000);
   // Éteindre le relais
   digitalWrite(RELAY_PIN, LOW);
 }

 // Vérifier si le bouton est enfoncé
 if (buttonState == LOW) {
   // Activer la pompe en allumant le relais
   digitalWrite(RELAY_PIN, HIGH);
 } else {
   // Éteindre le relais
   digitalWrite(RELAY_PIN, LOW);
 }

 // Lire la température et l'humidité à partir du capteur DHT11
 float temperature = dht.readTemperature();
 float humidity = dht.readHumidity();

 // Afficher la température et l'humidité sur l'écran LCD
 lcd.clear();
 // Écrire la température sur la ligne supérieure, centrée
 lcd.setCursor((16 - String(temperature).length()) / 2, 0);
 lcd.print(temperature);
 lcd.print("°C");
 // Écrire l'humidité sur la ligne du bas, centrée
 lcd.setCursor((16 - String(humidity).length()) / 2, 1);
 lcd.print(humidity);
 lcd.print("%");

 // Attendre 1 minute avant d'actualiser l'affichage
 delay(60000);
}

// Code provenant de :
// - Bibliothèque DS1302 : https://github.com/msparks/arduino-ds1302
// - Bibliothèque LiquidCrystal : https://www.arduino.cc/en/Reference/LiquidCrystal
// - Bibliothèque DHT : https://github.com/adafruit/DHT-sensor-library

merci d'avance pour votre temps passé a m'aider.

cordialement.

alexis

La bibliothèque que vous utilisez pour votre module 1302 ne correspond pas à votre code :wink:

Essayez ce code non testé :

#include <DS1302.h>
#include <LiquidCrystal.h>
#include <DHT.h>

#define DS1302_CLK 2
#define DS1302_DAT 3
#define DS1302_RST 4
#define RELAY_PIN 5
#define BUTTON_PIN 6
#define DHT_PIN 7

DS1302 rtc(DS1302_CLK, DS1302_DAT, DS1302_RST);
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
DHT dht(DHT_PIN, DHT11);

void setup() {
  pinMode(RELAY_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT);
  lcd.begin(16, 2);
  rtc.writeProtect(false);
  rtc.halt(false);
  Time t(2025, 6, 14, 17, 17, 0, Time::kSaturday);
  rtc.time(t);
}

void loop() {
  Time t = rtc.time();

  int currentHour   = t.hr;
  int currentMinute = t.min;
  int currentSecond = t.sec;
  int buttonState   = digitalRead(BUTTON_PIN);

  if (currentHour == 21 && currentMinute == 0 && currentSecond == 0) {
    digitalWrite(RELAY_PIN, HIGH);
    delay(300000);
    digitalWrite(RELAY_PIN, LOW);
  }

  digitalWrite(RELAY_PIN, buttonState == LOW ? HIGH : LOW);

  float temperature = dht.readTemperature();
  float humidity    = dht.readHumidity();

  lcd.clear();
  lcd.setCursor((16 - String(temperature).length()) / 2, 0);
  lcd.print(temperature);
  lcd.print("°C");
  lcd.setCursor((16 - String(humidity).length()) / 2, 1);
  lcd.print(humidity);
  lcd.print("%");

  delay(60000);
}

Si vous voulez de l’aide il faudra rendre votre code lisible ainsi que les messages d’erreur :wink:

PS :
Ce code a été adapté par l’IA mais je n’ai rien vérifié

Le message est clair ; le compilateur ne trouve pas la méthode "setDOW".
Il faut toujours regarder la première erreur indiquée.
Souvent une erreur provoque des faux positifs dans tout le code qui suit l'erreur.

As tu chargé la bibliothèque dans l'IDE avant de compiler ?
Est-ce la bibliothèque qui correspond au code ?

Très probablement NON a une ou aux deux questions..

Il est évident que les messages d’erreur indiquent que la bibliothèque DS1302.h ne correspond pas au code utilisé :wink:

D’ailleurs : GitHub - msparks/arduino-ds1302: Arduino library for the DS1302 Real Time Clock chip

Exemple de la bibliothèque :


// Example sketch for interfacing with the DS1302 timekeeping chip.
//
// Copyright (c) 2009, Matt Sparks
// All rights reserved.
//
// http://quadpoint.org/projects/arduino-ds1302
#include <stdio.h>
#include <DS1302.h>

namespace {

// Set the appropriate digital I/O pin connections. These are the pin
// assignments for the Arduino as well for as the DS1302 chip. See the DS1302
// datasheet:
//
//   http://datasheets.maximintegrated.com/en/ds/DS1302.pdf
const int kCePin   = 5;  // Chip Enable
const int kIoPin   = 6;  // Input/Output
const int kSclkPin = 7;  // Serial Clock

// Create a DS1302 object.
DS1302 rtc(kCePin, kIoPin, kSclkPin);

String dayAsString(const Time::Day day) {
  switch (day) {
    case Time::kSunday: return "Sunday";
    case Time::kMonday: return "Monday";
    case Time::kTuesday: return "Tuesday";
    case Time::kWednesday: return "Wednesday";
    case Time::kThursday: return "Thursday";
    case Time::kFriday: return "Friday";
    case Time::kSaturday: return "Saturday";
  }
  return "(unknown day)";
}

void printTime() {
  // Get the current time and date from the chip.
  Time t = rtc.time();

  // Name the day of the week.
  const String day = dayAsString(t.day);

  // Format the time and date and insert into the temporary buffer.
  char buf[50];
  snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d",
           day.c_str(),
           t.yr, t.mon, t.date,
           t.hr, t.min, t.sec);

  // Print the formatted string to serial so we can see the time.
  Serial.println(buf);
}

}  // namespace

void setup() {
  Serial.begin(9600);

  // Initialize a new chip by turning off write protection and clearing the
  // clock halt flag. These methods needn't always be called. See the DS1302
  // datasheet for details.
  rtc.writeProtect(false);
  rtc.halt(false);

  // Make a new time object to set the date and time.
  // Sunday, September 22, 2013 at 01:38:50.
  Time t(2013, 9, 22, 1, 38, 50, Time::kSunday);

  // Set the time and date on the chip.
  rtc.time(t);
}

// Loop and print the time every second.
void loop() {
  printTime();
  delay(1000);
}

PS : les messages d’erreur mettent clairement en évidence des problèmes dans le code par rapport à la bibliothèque utilisée. Le lien donné par @duarte0512 confirme cette situation :wink: maintenant il y a peut-être d’autres problèmes mais ils ne sont pas listés ici .

Bonjour.
oui mon code a été généré par une ia j'essaie d'apprendre a codé mais ce n'est pas simple. pourtant je ne comprend pas que l'ia me donne le lien de téléchargement des bibliotheque et que l'orsque j'installe cette derniere il me dise que ce n'est pas le bonne. je vais essayer via votre code,

bonjour.

oui j'ai bien telecharger la bibliotheque via le lien que le générateur de code m'a donner et j'ai importer le zip dans l'ide avant de compilér. mais j'ai comme l'impression que le générateur c'est trompé dans la bibliotheque et que je ne sait comment reparer son code avec mes notion vraiment tres limité de codage arduino.

Bonjour,

Je pense que vous n'avez pas suffisamment de connaissances pour faire un bon usage de l'IA.
Essayez de vous former et surtout commencez par respecter les règles du forum:

  • Formatage du code
  • Présentation des messages d'erreurs
  • Utilisation des liens fournis vers les sites qui permettent de vous former ...

C'est la deuxième fois que je vous demande de formater votre code mais vous ne cherchez même pas à savoir comment vous y prendre :wink: C'est déjà une mauvaise approche.

Ce que vous relatez exprime clairement une inadéquation entre la bibliothèque et votre code.

Bonne journée.

Bonjour duarte0512

Il arrive que l'IA donne du code qui ne compile pas, il ne faut pas en rester là, mais poursuivre le chat en indiquant:

Le programme fourni génère cette erreur:

C:\Users\alexi\AppData\Local\Temp.arduinoIDE-unsaved2025514-23532-dik3g.0t27a\sketch_jun14a\sketch_jun14a.ino: In function 'void setup()':
C:\Users\alexi\AppData\Local\Temp.arduinoIDE-unsaved2025514-23532-dik3g.0t27a\sketch_jun14a\sketch_jun14a.ino:37:6: error: 'class DS1302' has no member named 'setDOW'
rtc.setDOW(SATURDAY);
^~~~~~

et l'IA te fournira le correctif.
C'est ainsi que je pratique avec ChatGPT.

Cordialement
jpbbricole

Bonjour @jpbbricole

Déjà il faudrait qu'il teste l'exemple de la bibliothèque qu'il doit trouver dans l'IDE et que je lui ai fourni directement en #5.

Bonne journée à toi.

j'ai édité le premier post, @duarte0512 avait essayé de mettre les balises de code mais il les avait mal positionnées. Les 3 back-ticks doivent être avant et après le code (ou la sortie du compilateur en rajoutant text à côté ```text pour dire que la section qui suit est un bloc en police a espacement fixe mais pas du code)/

Sinon oui, il faut utiliser la bonne bibliothèque et essayer de se former un peu plutôt que de faire une confiance aveugle dans chatGPT....

Bonjour @J-M-L
Personnellement, je dirai plutôt qu'il faut savoir s'en servir et être capable de contourner ses lacunes puisque pour l'instant l'IA en a quelques unes :wink: (quoique dans le cas présent et pour avoir testé je vois plus les lacunes du côté du demandeur ce qui bien sûr n'est pas un reproche)
En fait c'est effectivement une confiance aveugle mais avec des nuances.

Oui mais dans ce cas si on ne vois pas de résultat, on demande comment faire :wink: Après je ne veux pas écraser ce pauvre @duarte0512 avec des reproches mais je veux juste lui montrer la bonne direction.

Bonne journée @J-M-L
PS : ça faisait longtemps que l'on ne s'était pas croisé sur le forum et c'est toujours un plaisir d'échanger avec vous :wink:

Oui c'est vrai je vous remercie apres j'utilise pas vraiment d'assistant ia au sens large du therme, jutilise juste le site: code générator for arduino, et il est vrai que il possède quand même pas mal de lacune mais je pense que comme vous me l'avez conseillé je vais essayer de travaillé en plus avec chat gpt ou une autre pour trouver les réponses au problèmes

Bonjours.

Lors de mon dernied post, mon dernied messages a etait je ne sait pas comment faire et il concernait belle et bien votre message sur la mise en forme sur le forum or je n'ai jamais eu de reponse sur ce point du coup je fait avec tâtonnement en assayant de faire au mieux dans l'attente du réponse. Déjà j'ai suivie votre premier conseils en mettant dans le groupe français, maintenant plus qu'à attendre vos autres conseils.

Est-ce que vous avez essayé l'exemple de la bibliothèque en #5 ?

lisez les recommandations listées dans "Les bonnes pratiques du Forum Francophone

c’est l’hôpital qui se moque de la charité

Votre dernier post :

Enfin essayez de nous donner un retour d'expérience.

Merci.
Bonne journée.

Bonjour duarte0512

Avec l'IA (j'utilise avant tout ChatGPT), il faut expliquer ce que l'on désire faire (pour faire simple je m'adresse à l'IA comme si c'était une personne), avec quels composants, en lui indiquant même certaines préférences comme le numéro de certaines pin, par exemple ou une certaine bibliothèque ou que tu ne veux pas de temposisation avec delay() etc.
Essayer sa première proposition, continuer le chat en demandant des améliorations ou en signalant une erreur de compilation (copier le début du message et le coller dans la suite du chat, ainsi, de fils en aiguilles, tu peux construire ton application.
Je débute toujours un nouveau Chat par En Arduino: ainsi on est sûre d'avoir un sketch "format Arduino"
A la fin de la réponse de ChatGPT, il y a toujours des propositions très intéressantes, donnes toi la peine de les lires voir même d'en tenir compte, c'est souvent un petit plus dans ton programme.
Le mieux est que tu te crée un compte ChatGPT afin de garder le fil de ton chat.

A+
Bonne après-midi
jpbbricole

Merci bien pour votre bienveillance certe vous êtes de bon conseils mais le faite de rabaissé quelqu'un qui ne cherche que a apprendre n'est vraiment pas quelque chose de correct, quand vous me dite que c'est l'hopital qui ce fous de la charité moi je vous repond que si je savait coder je n'utiliserai pas d'ia et que si je n'avait pas envie d'apprendre je ne viendrait pas sur ce genre de forum pour comprendre le code que m'a généré l'ia, certe j'ai dit que elle avait des lacunes mais si je l'utilise c'est que pour le moment je ne suis pas capable de sortir le meme travail qu'elle, mais c'est sur que ce n'est pas avec vos encouragement que je vais avoir l'envie et la soif d'apprentissage. Cela est bien dommage car vous m'avais l'aire d'avoir une tres tres bonne connaissance et d'avoir beaucoup de tres bon conseils a donner mais il faut savoir les dire sans rabaisser les autres

Je vous remercie beaucoup pour vos conseils et votre temps et surtout votre patience, je vaos mettre en pratique vos conseils sur mon prochain projet car celui ci est presque achevée.

Tres bonne journée a vous.

C’est vous qui vous rabaissez tout seul ou qui vous mettez dans une situation délicate notamment en mettant en évidence les lacunes de l’IA alors que vous n’avez aucune expérience :wink: je suis passé par où vous passez et même si vous me percevez comme vous rabaissant ou utilisant un ton condescendant, vous faites erreur :wink:
Je n’ai jamais eu de retour négatif à l’égard des membres du forum qui m’ont aidé même si la façon dont ils me guidaient était parfois un peu raide car c’était justifié. Il me semble que je suis resté courtois avec vous.
Mais peu importe, je ne vous en veux pas. Essayez simplement de rester à votre place : celle de quelqu’un qui part de rien et qui cherche à apprendre même si la position est délicate et difficile :wink:

PS : Bon et en plus @jpbbricole vous a bien aidé. C’est le plus sympathique du forum, toujours prêt à rendre service. Donc tout va bien :wink: