RTC qui refuse de marcher !
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

RTC qui refuse de marcher !



  1. #1
    Arutuf6

    RTC qui refuse de marcher !


    ------

    Bonjour à tous.

    L'objet de ce programme est d’allumer à une heure précise - ici 15 h 18 - une led, puis, de l'éteindre 10 secondes plus tard, ce qui devait pour moi être une chose facilement programmable et relativement simple ! Ce n’est pas le cas avec mon bout de programme.

    Par avance, merci à toute personne qui m'indiquera où est mon problème.

    /* l'objet de ce programme est de faire allumer a une heure précise puis, de l'éteindre 10 secondes plus tard.*/

    Code HTML:
    #include <Wire.h>
    #include <RTClib.h>
    
    RTC_DS1307 RTC; 
    const int LED =8;
    
    void setup() {                
      pinMode(8, OUTPUT); 
    }
    
    void loop() {
    
      DateTime now = RTC.now(); 
    
      DateTime heureRTC;
      uint8_t heureAlarme=15;
      uint8_t minuteAlarme=18;
    
      heureRTC = RTC.now();
    
      if (heureRTC.hour()==heureAlarme && heureRTC.minute()==minuteAlarme){
        digitalWrite(8,HIGH); // allume led pour 10 secondes
        delay (10000);
      }
      else{
        digitalWrite(8,LOW);// éteint la led
      }
    
      delay(1000);
    }

    -----

  2. #2
    Pauldair

    Re : RTC qui refuse de marcher !

    Bonjour,

    Que fait ton programme actuellement ? Ou que ne fait-il pas ?

    Je remarque une chose, 15h18 est un évènement qui se produit pendant 60 secondes. Tu dois donc avoir un délai d'allumage de 10 secondes, puis un délai de 50 seconde afin d'attendre que l'heure devienne 15h19 avant de relancer ta boucle.

    Pour être bien sûr de relancer la boucle à 15h19, mets un second délai délai de 51 secondes.

  3. #3
    Arutuf6

    Re : RTC qui refuse de marcher !

    Bonsoir, et merci de votre prompte réponse.

    Ce que je souhaite programmer correctement, pour l’inclure dans un projet global, c’est la possibilité de commander un événement – ici la LED – à une heure précise (HH/MM) pour une durée de seulement 10 secondes ou inférieure et, l’éteindre après le temps programmé. La durée de l’événement est courte.

    J’ai donc fait ce bout de programme pour vérifier que le DS 1307 fonctionne correctement. Sur l’Arduino uno, avant, je lui ai fait indiquer la date et l’heure vers un display de deux lignes et après cet essai, concluant, j’ai téléversé ce bout de programme et j’ai attendu…, attendu, mais la LED ne s’est jamais allumée malgré tous mes bidouillages. Après deux jours de galère, je sollicite aide de la communauté.

  4. #4
    Arutuf6

    Re : RTC qui refuse de marcher !

    J’ai modifié le dernier « delay 1000 » en « delay 51000 ». Comme cela ne marche toujours pas, il n’est pas à la bonne place !

  5. A voir en vidéo sur Futura
  6. #5
    hlbnet

    Re : RTC qui refuse de marcher !

    J'y connais rien au système que tu cibles mais je ne vois pas de boucle dans ton programme.
    Je vois une fonction qui s'appelle "loop", mais je ne vois aucune boucle.
    Où est la boucle d'attente ?

  7. #6
    Arutuf6

    Re : RTC qui refuse de marcher !

    Alors là, je tombe des nues. Il est vrai que je ne programme que de temps en temps et je n’avais pas pensé à cela. Je ne sais que faire ou te dire. Si cela peut aider, ce programme va tourner en boucle peut-être toutes les minutes, ou, toutes les dix minutes ou toutes les heures. Je suis en train de réaliser l’appareil qui va le recevoir et ce n’est qu’après les essais que je connaîtrai le délai qui séparera la succession de l’événement. Soit : allumage de la LED entre une et 10 secondes toutes les minutes, soit, allumage de la LED entre une et 10 secondes toutes les 10 minutes, ou, allumage de la LED entre une et 10 secondes toutes les heures.

    Cordialement et toujours disponible.

  8. #7
    Jack
    Modérateur

    Re : RTC qui refuse de marcher !

    je ne vois pas de boucle dans ton programme.
    Le programme de la fonction loop est exécuté en boucle. C'est le principe des arduino.

    Ce que je ne vois pas par contre c'est à quel moment la RTC est initialisée.

  9. #8
    Arutuf6

    Re : RTC qui refuse de marcher !

    Voici le nouveau programme avec la RTC initialisée, je pense.
    Code:
    /* l'objet de ce programme est de faire allumer a une heure précise  puis, de l'éteindre 10 secondes plus tard.*/
    
    #include <Wire.h>
    #include <RTClib.h>
    
    RTC_DS1307 RTC; 
    const int LED =8;
    
    void setup() {                
      pinMode(8, OUTPUT); 
    
      RTC.begin();
    }
    void loop() {
    
      DateTime now = RTC.now(); 
    
      DateTime heureRTC;
      uint8_t heureAlarme=22;
      uint8_t minuteAlarme=44;
    
      heureRTC = RTC.now();
    
      if (heureRTC.hour()==heureAlarme && heureRTC.minute()==minuteAlarme){
        digitalWrite(8,HIGH); // allume led pour 10 secondes
        delay (10000);
      }
      else{
        digitalWrite(8,LOW);// éteint la led
      }
    
      delay(51000);
    }
    Dernière modification par Jack ; 02/04/2015 à 23h49. Motif: Ajout balises code

  10. #9
    Jack
    Modérateur

    Re : RTC qui refuse de marcher !

    Essaie déjà de voir si la RTC a démarré en effectuant 2 lectures des secondes à quelques secondes d'intervalle.

  11. #10
    Arutuf6

    Re : RTC qui refuse de marcher !

    Code:
    /* l'objet de ce programme est de faire allumer a une heure précise  puis, de l'éteindre 10 secondes plus tard.*/
    
    #include <Wire.h>
    #include <RTClib.h>
    
    RTC_DS1307 RTC; 
    const int LED =8;
    
    void setup() {                
      pinMode(8, OUTPUT); 
    
      RTC.begin();
    }
    void loop() {
    
      DateTime now = RTC.now(); 
    
      DateTime heureRTC;
      uint8_t heureAlarme=0;
      uint8_t minuteAlarme=0;
      uint8_t secondAlarme=04;
    
      heureRTC = RTC.now();
    
      if (heureRTC.second()==heureAlarme){
        digitalWrite(8,HIGH); // allume led pour 10 secondes
        delay (10000);
      }
      else{
        digitalWrite(8,LOW);// éteint la led
      }
    
      delay(510);
    }
    Cela ne marche toujours pas alors que si lance le programme de lecture de l'heure la rtc fonctionne.
    Dernière modification par Jack ; 03/04/2015 à 10h17. Motif: ajout balises code

  12. #11
    Jack
    Modérateur

    Re : RTC qui refuse de marcher !

    je ne vais pas te mettre les balises code à chaque fois ..

    Sinon cette partie de code m'interpelle:
    Code:
    DateTime now = RTC.now(); 
    
    DateTime heureRTC;
    uint8_t heureAlarme=0;
    uint8_t minuteAlarme=0;
    uint8_t secondAlarme=04;
    
    heureRTC = RTC.now();
    je ne vois pas comment now pourrait être différente de heureRTC puisqu'entre les 2 appels à RTC.now() il ne va s'écouler que quelques µs, ms à la limite en raison de la durée de la trame I2C.

    Essaie-voir de déclarer now en variable globale et de l'initialiser une fois pour toutes dans la fonction setup()

  13. #12
    Arutuf6

    Re : RTC qui refuse de marcher !

    J’ai tout effacé et recommencé à zéro, mais, en m’aidant du moniteur série. Maintenant tout est ok et cela marche comme je le souhaite.

    Je donne mon programme complet qui, éventuellement, peut aider quelqu’un.

    Merci à tous.

    Code:
    //Arutuf le vendredi 3 avril 2015
    /*Ce programme allume et éteint une led un jour précis à une heure, minute et seconde précises*/
    
    #include <Wire.h>
    #include "RTClib.h"
    #define LED 8 // Led sur la ligne 8
    
    RTC_DS1307 RTC;
    //const int LED = 8;
    
    void setup () {
      pinMode(8, OUTPUT); // broche en sortie pour la led
    
      Serial.begin(57600); //Démarre  la communication avec le moniteur
      Wire.begin(); //Démarre la librairie wire.h
      RTC.begin(); //Démarre la librairie RTClib.h
      //Si RTC ne fonctionne pas
      if (! RTC.isrunning()) {
        Serial.println("RTC ne fonctionne pas !");
    
        RTC.adjust(DateTime(__DATE__, __TIME__));    //Met à l'heure à date à laquelle le sketch est compilé
      }
    }
    
    void loop() {
      //Heure actuelle
      DateTime now = RTC.now();
    
      //Alarme se déclenchant ce vendredi à 14 h 31 m 10 s
      if(now.dayOfWeek() == 5 && now.hour() == 14 && now.minute() == 31 && now.second() == 10){   
        digitalWrite(8,HIGH); 
        delay(2000);// allume led pour 10 secondes
        Serial.println("Declenchement de l'alarme");
    
        //Pas d'alarme 
      } 
      else {
        digitalWrite(8,LOW);// éteint la led
        Serial.println("Pas d'alarme");
      }
      delay(2000);
    }
    Dernière modification par JPL ; 03/04/2015 à 16h27. Motif: Correction de la balise Code

Discussions similaires

  1. Ils l'ont fait ! Marcher sur l'eau est POSSIBLE !!!
    Par invited003cb8a dans le forum Physique
    Réponses: 27
    Dernier message: 13/06/2013, 10h12
  2. [Biologie Moléculaire] PCR qui veut pas marcher
    Par SoulPower dans le forum Biologie
    Réponses: 19
    Dernier message: 13/04/2010, 15h22
  3. Marcher sur l'eau
    Par invitef64fa85e dans le forum Technologies
    Réponses: 6
    Dernier message: 27/10/2009, 17h40
  4. Ca va t'il marcher ?
    Par inviteef5c8f87 dans le forum Électronique
    Réponses: 20
    Dernier message: 29/10/2008, 17h59
  5. msn veut plus marcher!
    Par magmatic_rock dans le forum Internet - Réseau - Sécurité générale
    Réponses: 17
    Dernier message: 09/02/2005, 14h13