GDWLIB #2 La classe CyclicTimer pour Arduino


Messages recommandés

Bonjour,

 

Nouvelle classe disponible, elle gère les process cycliques avec distinction des temps programmés en

fonction du jour ou de la nuit.

 

La base temps est fournie par un RTC.

 

les librairies utilisées sont contenues dans l'archive

 

L'exemple vous montre comment utiliser cette librairie pour

2 pompes aéro et 2 brasseurs séquentiels simultanément.

 

 

 

#include <Wire.h>
#include "RTClib.h"
#include "CyclicTimer.h"

#define AERO_PUMP1_PIN 5
#define AERO_PUMP2_PIN 6
#define BRASSEUR1_PIN  7
#define BRASSEUR2_PIN  8

RTC_DS1307  rtc;
CyclicTimer aero1(AERO_PUMP1_PIN);
CyclicTimer aero2(AERO_PUMP2_PIN);
CyclicTimer brasseur1(BRASSEUR1_PIN);
CyclicTimer brasseur2(BRASSEUR2_PIN);

DateTime now;

void initialiseObjets()
{
    // initialisation des temps de fonctionnement
    // vous pouvez egalement definir des variables dans la partie
    // déclarative du programme et passer ces variables comme second paramètre
    // à cette méthode.
    
    aero1.initialise(DAY_DURATION_ON,30);
    aero1.initialise(DAY_DURATION_OFF,180);
    aero1.initialise(NIGHT_DURATION_ON,10);
    aero1.initialise(NIGHT_DURATION_OFF,600);
    aero2.initialise(DAY_DURATION_ON,60);
    aero2.initialise(DAY_DURATION_OFF,300);
    aero2.initialise(NIGHT_DURATION_ON,10);
    aero2.initialise(NIGHT_DURATION_OFF,600);
    brasseur1.initialise(DAY_DURATION_ON,300);
    brasseur1.initialise(DAY_DURATION_OFF,3600);
    brasseur1.initialise(NIGHT_DURATION_ON,300);
    brasseur1.initialise(NIGHT_DURATION_OFF,7200);
    brasseur2.initialise(DAY_DURATION_ON,200);
    brasseur2.initialise(DAY_DURATION_OFF,1800);
    brasseur2.initialise(NIGHT_DURATION_ON,60);
    brasseur2.initialise(NIGHT_DURATION_OFF,3600);
}

void setup()
{
    #ifdef AVR
      Wire.begin();
    #else
      Wire1.begin();
    #endif

    rtc.begin();
    initialiseObjets();
}

void loop()
{   

    // cette variable sera remplacée dans votre code par la valeur booléenne
    // indiquant si vos lampes sont allumée ou non.
    // vous pouvez eventuellement assigner cette valeur à l'aide d'un montage
    // par cellule photo sensible
    // si vous utilisez la classe DailyTimer, utilisez la methode isWorking()
    // de votre objet pour recupérer cette valeur
    bool jour = true;

    now = rtc.now();
    aero1.run(now.unixtime(),jour);
    aero2.run(now.unixtime(),jour);
    brasseur1.run(now.unixtime(),jour);
    brasseur2.run(now.unixtime(),jour);
}
 

 

 

 

example.zip

 

Si vous avez des questions n'hésitez pas..

 

++

GEN

Modifié par Gen
  • Like 2
Lien à poster
Partager sur d’autres sites

bien sur ... unixTime() renvoie des minutes, c'est nouveau ? :ph34r:

 

quand je me casse le derche à documenter une classe fo lire pinpin, c'est pas pour faire bô ! (voir fichier .h)

et qu'est ce qu'on y trouve.... ? MAGIK !

 

class CyclicTimer
{
    public:
        // Déclaration de l'objet
        CyclicTimer(int IO_Pin, bool invertedRelay = false);

        // initialise les temps par catégorie
        // param 1 = DAY_DURATION_ON etc..
        // param 2 = durée en secondes
    .......

C'te jeunesse des fois, j'vous jure ;-)

 

++

GEN

Lien à poster
Partager sur d’autres sites

reuh .

 

si tu ouvres avec un éditeur standard, c'est normal (il faut peut-être lui spécifier "retour automatique de ligne).

Avec l'éditeur de l'environnement, il n'y a aucun souci.

 

++

GEN

Lien à poster
Partager sur d’autres sites
  • 5 mois après ...

Salut Gen,

 

J'étais en train de me prendre le choux depuis tout à l'heure alors que tu as déjà maché le boulot ...

 

Merci encore !

 

PS: Ca commence à prendre forme mon prototype :)

Modifié par kannapwet
Lien à poster
Partager sur d’autres sites

Je me permets de reposter car j'ai une question ^^.

 

Je souhaite que mon relai soit inversé. Je pense avoir compris qu'il faut modifier cette ligne:

CyclicTimer(int IO_Pin, bool invertedRelay = false)

et recompiler. Si oui, comment faire ?

Ou bien, puis le passer en paramètres ?

 

Désolé je débute tout juste !

Modifié par kannapwet
Lien à poster
Partager sur d’autres sites

Yop.

 

Pas de prob, ce fil de discussion est fait pour les questions.

 

Tu n'as rien besoin de recompiler au niveau de la classe, cela se fera automatiquement quand tu compileras ton programme

 

si tu mets :

 

#define TEST_PIN 9

 

CyclicTimer MonTimer(TEST_PIN, false);      //la commande de relais n'est pas inversée

CyclicTimer MonTimer(TEST_PIN, true );      //la commande de relais est  inversée

 

Mais attention, testes ta platine relais avant car certaines platines fonctionnent à l'inverse (en etat haut le relais est ouvert (pas contact), en etat bas il est fermé (contact)

 

Sinon tu peux aussi changer l'ordre de câblage en sortie de relais.. bref, tu n'as que l'embarras du choix

 

En espérant avoir répondu à ta question, sinon n'hésites pas.

 

++

GEN

Lien à poster
Partager sur d’autres sites
  • 2 semaines après ...

- initialise s'effectue dans le setup. (on ne touche à rien dans le code de la classe)

 

- setsettings est appellé run time par une action utilisateur via une interface.. xyz

et c'est dans cette méthode que tu peux implémenter un process de mise en mémoire EEPROM

 

par contre si tu n'implémentes rien, les deux méthodes sont identiques.

 

++

GEN

Lien à poster
Partager sur d’autres sites
Invité
Ce sujet ne peut plus recevoir de nouvelles réponses.