Piloter un moteur cc avec une horloge ds3231

Bonjour,
Mon projet est d'ouvrir et fermer la porte d'un poulailler à heure fixe. J'ai écrit un programme mais qui ne s’exécute pas au heures prévues. Les tests sur une courte durée font les actions attendues mais pas sur de plus longues durées. Je pense que le problème vient du paramétrage de l'horloge. Merci de vos conseils :

    #include <Wire.h>
    #include <ds3231.h>
     
    struct ts t; //déclaration variable t 
     
    void setup() {
      Serial.begin(9600);
      Wire.begin();
      DS3231_init(DS3231_INTCN);
     
      t.hour=18; // données pour mettre à l'heure l'horloge
      t.min=47;
      t.sec=00;
      t.mday=29;
      t.mon=07;
      t.year=2023;
     
      DS3231_set(t); // mise à l'heure de l'horloge
    }
     
    void loop() {
      // put your main code here, to run repeatedly:
      DS3231_get(&t);
      Serial.print("date : ");
      Serial.print(t.mday);
      Serial.print("/");
      Serial.print(t.mon);
      Serial.print("/");
      Serial.print(t.year);
      Serial.print("\t Heure : ");
      Serial.print(t.hour);
      Serial.print(":");
      Serial.print(t.min);
      Serial.print(".");
      Serial.println(t.sec);
     
      delay(500);
      
      //Quand courant positif verin avance, ouverture
  if (((t.hour) == 07) && ((t.min) == 00)) { //07h00
    digitalWrite(4, HIGH); 
    digitalWrite(3, LOW);   
    
    delay(15000);

    digitalWrite(4, LOW);
    digitalWrite(3, LOW);
    
  }
  //Quand courant negatif verin recule fermeture
  if (((t.hour) == 22) && ((t.min) == 00)) { //22h00
    digitalWrite(4, LOW); 
    digitalWrite(3, HIGH);   
    
    delay(15000);

    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
    
  }
  }

:warning:

Post mis dans la mauvaise section, on parle anglais dans les forums généraux. ➜ déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans "Les bonnes pratiques du Forum Francophone”

à chaque fois que vous démarrez votre arduino il se met à cette heure là...


attention à la notation en commençant par un 0 pour les nombres, cela signifie que vous travaillez en base 8 (pas génant ici mais vous ne pourrez pas écrire 09 par exemple)

  if (((t.hour) == 7) && ((t.min) == 0)) { //07h00

vos tests seront vrais et effectués pendant toute une minute alors que vous ne voulez sans doute effectuer l'action qu'une seule fois... il faut se souvenir de la position.


pour tester un moment de la journée on calcule souvent le nombre de secondes depuis minuit

unsigned long secDepuisMinuit = t.hour * 3600ul + t.min * 60ul + t.sec;

ça permet de comparer des moments simplement (on compare 2 nombres)

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.