Gen 2 808 Posté(e) avril 12, 2016 Partager Posté(e) avril 12, 2016 (modifié) 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é avril 12, 2016 par Gen 2 Lien à poster Partager sur d’autres sites
joebartoon 0 Posté(e) avril 12, 2016 Partager Posté(e) avril 12, 2016 Reuh, " MERCI! " Si tu en as d'autre n’hésite surtout pas!!! Lien à poster Partager sur d’autres sites
joebartoon 0 Posté(e) avril 17, 2016 Partager Posté(e) avril 17, 2016 Bonsoir, Dans quelle unité sont les durées? Merci Lien à poster Partager sur d’autres sites
Gen 2 808 Posté(e) avril 17, 2016 Auteur Partager Posté(e) avril 17, 2016 re. édites le fichier.h les explications s'y trouvent ++ GEN Lien à poster Partager sur d’autres sites
joebartoon 0 Posté(e) avril 18, 2016 Partager Posté(e) avril 18, 2016 ReuH, Ok, c'est des minutes! Merci Lien à poster Partager sur d’autres sites
Gen 2 808 Posté(e) avril 18, 2016 Auteur Partager Posté(e) avril 18, 2016 bien sur ... unixTime() renvoie des minutes, c'est nouveau ? 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
joebartoon 0 Posté(e) avril 19, 2016 Partager Posté(e) avril 19, 2016 Oupssss Je l'ai ouvert pourtant le fichier en .h sous un fichier txt qui n'a aucune tabulation est donc tout en longueur. Je n'ai pas vu! gOOd NiGhT Lien à poster Partager sur d’autres sites
Gen 2 808 Posté(e) avril 20, 2016 Auteur Partager Posté(e) avril 20, 2016 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
kannapwet 293 Posté(e) octobre 17, 2016 Partager Posté(e) octobre 17, 2016 (modifié) 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é octobre 17, 2016 par kannapwet Lien à poster Partager sur d’autres sites
kannapwet 293 Posté(e) octobre 17, 2016 Partager Posté(e) octobre 17, 2016 (modifié) 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é octobre 17, 2016 par kannapwet Lien à poster Partager sur d’autres sites
Gen 2 808 Posté(e) octobre 17, 2016 Auteur Partager Posté(e) octobre 17, 2016 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
kannapwet 293 Posté(e) octobre 17, 2016 Partager Posté(e) octobre 17, 2016 Super Gen ! T'es un chef ! Ça commence à prendre forme mon prototype Merci pour tout ! Lien à poster Partager sur d’autres sites
rotavap' 0 Posté(e) novembre 1, 2016 Partager Posté(e) novembre 1, 2016 Salut Gen, Je ne comprend pas la différence entre la fonction initialise et setSetting,peux-tu m'éclairer stp ?A+ Lien à poster Partager sur d’autres sites
Gen 2 808 Posté(e) novembre 1, 2016 Auteur Partager Posté(e) novembre 1, 2016 - 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
rotavap' 0 Posté(e) novembre 1, 2016 Partager Posté(e) novembre 1, 2016 Merci de ta réponse rapide ! Lien à poster Partager sur d’autres sites
Messages recommandés