Gen 2 808 Posté(e) avril 9, 2016 Partager Posté(e) avril 9, 2016 (modifié) Bonjour à tous. Vu le nombre de requêtes personnelles concernant des exemples de codes, et le nombre de néophytes qui , disont le, rament avec le codage C++ Je vous mets à disposition la classe DailyTimer que je vous ai concocté de la manière la plus simple possible afin de faciliter le travail des pauvres galériens.. Elles sont documentées et deux exemples d'utilisations sont fournis Cette classe est un temporisateur journalier, qui peut être utilisé par exemple pour des lampes, mais des extracteurs ou autres.. que sais-je encore Cette classe gère le chevauchement de 2 jours et est très simple à utiliser. l'exemple ne prend pas en compte la gestion du RTC qui est à votre charge exemple : #include "DailyTimer.h"#define HPS_PIN 10DailyTimer HPS(HPS_PIN); // déclaration de la minuterie sur pin 10 de l'arduinovoid setup(){ HPS.setValue(GROW_START,21,00); // 21:00 HPS.setValue(GROW_STOP ,15,00); // 15:00 HPS.setValue(FLO_START ,11,20); // 11:20 HPS.setValue(FLO_STOP ,23,20); // 23:20 }void loop(){ HPS.run(1347,CROISSANCE);} Dans cet exemple, le 1347 correspond au nombre de minutes écoulées depuis 00:00hr. Je vous remercie de ne poser à la suite, que des questions ayant attrait au sujet de cette classe. Si vous rencontrez des problèmes, n'hésitez pas à poser vos questions ci-dessous. Je me ferai un plaisir d'y répondre. les fichiers et exemples sont contenus dans le fichier .zip en pièce jointe. DailyTimer.zip Amusez-vous bien ! @pluche GEN Modifié mai 3, 2016 par Gen 3 Lien à poster Partager sur d’autres sites
joebartoon 0 Posté(e) avril 10, 2016 Partager Posté(e) avril 10, 2016 Bonsoir, Merci GEN de penser a nous!!! Si tu en a d'autres des classes, je suis preneurs Buy Lien à poster Partager sur d’autres sites
Gen 2 808 Posté(e) avril 11, 2016 Auteur Partager Posté(e) avril 11, 2016 Yop. T'inquiètes.. d'autres classes vont être mises en lignes. ++ GEN 1 Lien à poster Partager sur d’autres sites
joebartoon 0 Posté(e) avril 11, 2016 Partager Posté(e) avril 11, 2016 Bonsoir GEN, Super, MERCI Lien à poster Partager sur d’autres sites
rotavap' 0 Posté(e) avril 14, 2016 Partager Posté(e) avril 14, 2016 Je viens de voir ta classe, autant dire qu'elle va m'être utile Je ne vois cependant pas très bien comment s'en servir, en effet dans loop pourquoi 1347 ?Après avoir déclaré le RTC, où faire appel à lui dans le code ? sous quel forme enregistrer l'heure ? quel fichier contenu dans le dailytimer.zip faut-il modifier ?Merci d'avance ! Lien à poster Partager sur d’autres sites
Gen 2 808 Posté(e) avril 14, 2016 Auteur Partager Posté(e) avril 14, 2016 (modifié) yop il n'y a rien a modifier dans la librairie (.h et .cpp) le 1347 est un exemple, il représente le nombre de minutes depuis 00:00hr à l'instant T voici comment cela se présente : #include <Wire.h> #include <RTClib.h> #include "DailyTimer.h" #define HPS_PIN 10 RTC_DS1307 RTC; DateTime now; DailyTimer HPS(HPS_PIN); // déclaration de la minuterie sur pin 10 de l'arduino // fonction qui te permet de recupérer le nombre de minutes écoulées depuis minuit. int getTimeInMinutes(DateTime currentTime) { return ((currentTime.hour() * 60) + currentTime.minute()); } void setup() { Serial.begin(9600); // pour les éventuelles sorties sur moniteur serie Wire.begin(); RTC.begin(); HPS.setValue(GROW_START,21,00); // 21:00 HPS.setValue(GROW_STOP ,15,00); // 15:00 HPS.setValue(FLO_START ,11,20); // 11:20 HPS.setValue(FLO_STOP ,23,20); // 23:20 } void loop() { now = RTC.now(); HPS.run(getTimeInMinutes(now),CROISSANCE); // ou sans la fonction getTimeInMinutes tu aurais pu écrire cela egalement sous // cette forme // HPS.run((now.hour() * 60) + now.minute(),CROISSANCE); // mais c'est moins propre et moins lisible } Plus simple... tu meurs ++ GEN Modifié avril 14, 2016 par Gen Lien à poster Partager sur d’autres sites
rotavap' 0 Posté(e) avril 14, 2016 Partager Posté(e) avril 14, 2016 Ah oui ... Puissant en effet ! ^^Merci beaucoup pour tes explications ! Lien à poster Partager sur d’autres sites
Gen 2 808 Posté(e) avril 14, 2016 Auteur Partager Posté(e) avril 14, 2016 re: Content de voir que cela te plait, effectivement c'est le but des classes, faciliter l'usage de fonctionnalités avec un niveau d'abstraction. Définition de l'abstraction : tu te fous de savoir ce qu'il y a dans cette classe, et de savoir comment elle fonctionne. tout ce que tu as besoin de savoir c'est comment l'utiliser Elle n'est pas belle la vie ? N-Joy Man ++ GEN 1 Lien à poster Partager sur d’autres sites
Gen 2 808 Posté(e) avril 14, 2016 Auteur Partager Posté(e) avril 14, 2016 dans l'exemple simple, j'avais mis les explications Methodes disponibles : ****************************************************************** * void setValue(int configurationType, int inputTime); * ****************************************************************** Assigne les valeurs de départ et de fin pour chaque cycle voir exemple plus bas ****************************************************************** * void setValue(int configurationType,int HH, int MM); * ****************************************************************** Variante d'introduction des valeurs de départ et de fin pour chaque cycle voir exemple plus bas ****************************************************************** * void run(int currentTime, int plantCycle); * ****************************************************************** doit se trouver dans la boucle 'void loop()' parametre 1 = heure actuelle sous forme de minutes depuis 00:00hr parametre 2 = type de cycle lumineux (CROISSANCE ou FLORAISON) ****************************************************************** * int getValue(int configurationType); * ****************************************************************** renvoie la valeur enregistrée en fonction du type de selection param 1 = GROW_START ou GROW_STOP ou FLO_START ou FLO_STOP valeur renvoyée = un entier avec le temps converti en minutes depuis 00:00 hr ****************************************************************** * bool isWorking(); * ****************************************************************** renvoie un booléen signifiant si la lampe est en activité synthaxe : if(HPS1.isWorking()) { ...... } ++ GEN Lien à poster Partager sur d’autres sites
joebartoon 0 Posté(e) avril 17, 2016 Partager Posté(e) avril 17, 2016 Bonsoir GEN, Je vois que dans l'exemple multi, pour chaque HPS il y a un "mode" croissance et floraison. Le choix de ce mode ce fait dans le void loop () HPS.run(1260,FLORAISON); ou HPS.run(1260,CROISSANCE); si je veux faire ce choix par un interrupteur par exemple? Merci de ton aide. Lien à poster Partager sur d’autres sites
joebartoon 0 Posté(e) avril 17, 2016 Partager Posté(e) avril 17, 2016 Re, Alors, est ce que ceci fonctionne? (je ne met que ce que j'ai ajouté) #define BP1 12 void setup() { pinMode (BP1, INPUT); } void loop() { if ( BP1, HIGH ) { HPS.run(1260,CROISSANCE); HPS.stop(900,CROISSANCE); Serial.println("Mode CROISSANCE"); } else if ( BP1, LOW ) { HPS.run(1260,FLORAISON); HPS.stop(540,FLORAISON); Serial.println("Mode FLORAISON"); } } C'est bien ça? Lien à poster Partager sur d’autres sites
Gen 2 808 Posté(e) avril 18, 2016 Auteur Partager Posté(e) avril 18, 2016 (modifié) yop. pas du tout. LoL 1 - Pour connaitre l'état du I/O il faut utiliser suivant le cas, la commande digitalRead() ou analogRead() 2 - pour la définition du mode croissance ou floraison via un interrupteur il faut que l'interrupteur soit d'un coté branché au 5v et de l'autre à l'I/O, l'usage d'une résistance est nécessaire et d'un condensateur pour éviter les rebonds 3 - ensuite il ne te reste plus qu'à aller lire l'état de ton i/o et d'assigner ta variable globale via un if conditionnel. #define bouton 3 int growingMode; void setup() { pinMode(bouton, INPUT); //on active la résistance de pull-up en mettant la broche à l'état haut (mais cela reste toujours une entrée) digitalWrite(bouton, HIGH); } void loop(){ if(digitalRead(bouton)==HIGH) { growingMode = CROISSANCE; } else { growingMode = FLORAISON; } et dans ton appel de fonction run HPS1.run(le temps en minute depuis minuit qui vient de ton RTC, growingMode); } PS 1 : tu devrais taper ton code dans une environnement de développement et ensuite compiler ton code il te signifiera de suite toutes tes erreurs de syntaxe. PS 2 : je sais pas d'où tu sors la méthode stop ??? il n'y a pas besoin de lui dire stop because la definition des plages horaire se fait via la methode setValue() de l'objet HPS1 qui vient de l'instanciation de ta classe DailyTimer ++ GEN Modifié avril 18, 2016 par Gen Lien à poster Partager sur d’autres sites
joebartoon 0 Posté(e) avril 18, 2016 Partager Posté(e) avril 18, 2016 Bonsoir GEN, Ok, Merci! The road is long! Lien à poster Partager sur d’autres sites
Gen 2 808 Posté(e) avril 18, 2016 Auteur Partager Posté(e) avril 18, 2016 reuh Bonsoir GEN, Ok, Merci! The road is long! Plus que tu ne le penses Courage ! ++ GEN Lien à poster Partager sur d’autres sites
joebartoon 0 Posté(e) avril 19, 2016 Partager Posté(e) avril 19, 2016 Bonsoir GEN, C'est justement ce qui m’inquiète, lorsque l'on ce lance dans un projet qui est HORS compétenceS ont découvre chaque jours et l'ont perds espoirs! Bye Lien à poster Partager sur d’autres sites
kannapwet 293 Posté(e) octobre 19, 2016 Partager Posté(e) octobre 19, 2016 Coucou ! Dis moi, pourrait on, plutôt que de mettre "CROISSANCE" ou "FLORAISON" en paramètres, lui donner un booléen ? Comme dans ta classe MistController. Cela permettrait d'utiliser la même variable Je dis peut-être une grosse ânerie, désolé ! Tchuss ! Lien à poster Partager sur d’autres sites
Gen 2 808 Posté(e) octobre 19, 2016 Auteur Partager Posté(e) octobre 19, 2016 yop Je te rassure, tu dis une grosse ânerie.. Si tu regardes la défintion de la classe (fichier .h) tu y trouveras ceci #ifndef DailyTimer_h#define DailyTimer_h#define GROW_START 0#define GROW_STOP 1#define FLO_START 2#define FLO_STOP 3#define CROISSANCE 0 #define FLORAISON 1 tu peux le caster sans aucun problème.. Si justement j'ai utilisé les terme CROISSANCE & FLORAISON, c'est dans un souci de lisibilité, afin de ne pas chercher la valeur booléenne associée.. donc si tu préfères CROISSANCE = false et FLORAISON = true on aurait aussi pu définir un type enum... mais pour 2 valeurs je trouve cela ridicule. @pluche GEN 3 Lien à poster Partager sur d’autres sites
Messages recommandés