Offline
Full Member
Karma: 0
Posts: 110
|
 |
« Reply #15 on: May 09, 2012, 02:51:36 am » |
Tes "cuisses" ne vont pas se mettre à hurler parce que la brumisation aura debutée à 12H32.07 au lieu de 12H31.47 smiley-cool , ce qui est important c'est la constance. Non pas de soucis, mais comme la brumi ne doit pas dépasser 20s, j ai gérer çà en secondes et pas minutes après je ne saisie toujours pas ce qu'est le vrai problème..? deux brumisation ne ce font pas c'est ça? en fait non, les 2 brumisations (1ère/dernière) définis sur des long rentrés manuellement ne posent pas de problème ce sont celles que j'essaie de définir par des calculs qui ne fonctionnent pas en fait ce morceaux là: je souhaite sur 11h15 faire 5 pulvérisations 11h15 / 5 = environ toutes les 2h20 une pulvérisation 1 ère pulverisation : 8h15 la suivante : 8h15 + 2h20 la suivante = la suivante + 2 h20
|
|
|
|
|
Logged
|
|
|
|
|
83 - var
Offline
Sr. Member
Karma: 0
Posts: 452
ARDUINO Powa !
|
 |
« Reply #16 on: May 09, 2012, 03:10:50 am » |
okok, tu peut nous mettre tout le code qui plante qu'on y jete un oeuil =)
Skizo!
|
|
|
|
|
Logged
|
Un tien vaux mieux que deux tu l'auras !
|
|
|
|
Offline
Edison Member
Karma: 6
Posts: 2430
|
 |
« Reply #17 on: May 09, 2012, 05:25:37 am » |
Tes "cuisses" ne vont pas se mettre à hurler parce que la brumisation aura debutée à 12H32.07 au lieu de 12H31.47 smiley-cool , ce qui est important c'est la constance. Non pas de soucis, mais comme la brumi ne doit pas dépasser 20s, j ai gérer çà en secondes et pas minutes après je ne saisie toujours pas ce qu'est le vrai problème..? deux brumisation ne ce font pas c'est ça? en fait non, les 2 brumisations (1ère/dernière) définis sur des long rentrés manuellement ne posent pas de problème ce sont celles que j'essaie de définir par des calculs qui ne fonctionnent pas en fait ce morceaux là: je souhaite sur 11h15 faire 5 pulvérisations 11h15 / 5 = environ toutes les 2h20 une pulvérisation 1 ère pulverisation : 8h15 la suivante : 8h15 + 2h20 la suivante = la suivante + 2 h20 alors travaille en minute relative depuis minuit tu a 1440 minutes par jour 8H15= minute 495 (brumisation N° 0, la premiere) 2H20=140 minutes les 4 (ou x) brumisations suivantes interviendront à la minute brume[ib]=495+(140*ib) etc ne reste qu'à reconstituer ça en heure pour comparer avec le ds1307 heurebrume (un entier) =brume[ib]/60 (division) minutebrume (un entier)= brume[ib] % 60 (modulo) intuitivement je travaillerais avec un tableau des minutes de brumisation : brume[ib] où ib est le numero (l'indice) de brumisation pour une journée (entre 0 et 4 pour 5 brumisations)
|
|
|
|
« Last Edit: May 09, 2012, 05:37:47 am by Artouste »
|
Logged
|
|
|
|
|
France
Offline
Edison Member
Karma: 12
Posts: 1801
There is an Arduino for that
|
 |
« Reply #18 on: May 09, 2012, 06:02:06 am » |
Y'a un truc que je comprends pas. Tu as une horloge temps réel qui te donne des heures, minutes, secondes et tu t'embêtes à faire des calculs tordues avec des long sur des heures converties en minutes sur une journée. Serais-tu un pervers qui s'ignore? Pourquoi ne pas travailler directement avec les heures et minutes pour le déclenchement des brumisations et utiliser le compte des secondes pour arrêter les brumisateurs? Eventuellement, si tu es perfectionniste, créer un classe qui te permette de faire de l'arithmétique en heure,minute,seconde.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 110
|
 |
« Reply #19 on: May 09, 2012, 06:49:34 am » |
tu t'embêtes à faire des calculs tordues ... Serais-tu un pervers qui s'ignore? Tu viens de le dire, je suis tordu  et peut être pervers aussi  Question idiote, vous appelez quoi une classe ? (un void temps() par exemple) Pourquoi ne pas travailler directement avec les heures et minutes pour le déclenchement des brumisations et utiliser le compte des secondes pour arrêter les brumisateurs?
je souhaite paramétrer à travers mon écran TFT : l heure et date du jour (fait) sous forme 8 h 15 1 (<---jour semaine) 12/12/2012 L heure d'allumage/extinction des feux sous forme 8 h 15 à faire par terra : consigne de température : delta t° nuit T° jour brumisation : Nbre de brumi période sèche Nbre de brumi période pluie mois période sèche mois période pluie et avec çà, je faits mes calculs (pervers  ) pour essayer d obtenir ce que je souhaite et çà doit coincer lorsque je faits : (heure de fin-heure de début)/nbre de brumisation =X , X me donne l'écart entre chaque brumisation je ne dirais pas perfectionniste mais plutôt ne pas avoir à rebrancher l’ordinateur à chaque fois, bon d accord j’admets un pervers perfectionniste tordu, je l assume, je suis comme çà aussi au boulot et çà complique énormément les choses car personne ne suit  est ce que l on peut convertir un INT en LONG, car au niveau de la modification à travers l'écran comment je peux gérer le L avec un LONG=xxL Il faut que je passe par : int essai=5; long=(essai)L ?
|
|
|
|
« Last Edit: May 09, 2012, 07:08:45 am by Stef84 »
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 110
|
 |
« Reply #20 on: May 09, 2012, 01:34:44 pm » |
j ai trouvé çà :
Example Code
int x; int y; float z;
x = 1; y = x / 2; // y now contains 0, ints can't hold fractions z = (float)x / 2.0; // z now contains .5 (you have to use 2.0, not 2)
est ce que le long ne réagit pas comme ci-dessus pour le int
|
|
|
|
|
Logged
|
|
|
|
|
France
Offline
Edison Member
Karma: 12
Posts: 1801
There is an Arduino for that
|
 |
« Reply #21 on: May 09, 2012, 02:53:42 pm » |
Question idiote, vous appelez quoi une classe Une classe permet de regrouper dans une même entité des données et des fonctions membres (appelées aussi méthodes) permettant de manipuler ces données ( http://fr.wikibooks.org/wiki/Programmation_C%2B%2B/Les_classes) Par exemple, pour ton application, on peut créer une classe HMS, qui définit en interne 3 données heure, minute,seconde et un ensemble d'opérateurs qui permettent de manipuler ces données. En premier on créé un constructeur c'est une méthode particulière qui va être appelée lors de la création d'un nouvel objet HMS et qui permet de l'initialiser. On peut ensuite redéfinir l'addition, la soustraction les opérateurs de comparaison sur cet objet . Comme ça ensuite ton programme manipule directement des objets HMS qui contiennent des heures minutes secondes de manière complètement transparente. Par exemple une fois la classe définie tu peux écrire quelque chose comme ça HMS HeureDebut(8,45,00); HMS HeureCourante(); HMS deltaBrume(2,20,0); HMS HeureBrumi();
DS1307 rtc
rtc.get(&sec, &min, &hour, &day, &month, &year); HeureCourante.set(hour,min,sec);
if (HeureCourante > HeureDebut){ ....... }
ou bien HeureBrumi = HeureCourante+deltaBrume;
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 0
Posts: 110
|
 |
« Reply #22 on: May 10, 2012, 03:27:37 am » |
Te remercie pour les explications
effectivement çà pourrait être plus simple d'utilisation après coup
par contre les classes sont à faire dans un .h et .cpp
ou on peut le faire directement dans le pde (c est un peu au dessus de mes compétences pour l instant)
j ai remodifié mon prog hier, en jouant sur les CAST, je verrais ce soir si çà a fonctionné ou pas, mais je suis intéressé parton exemple et remplacer ce que j ai fait, mais je voudrais savoir pourquoi ce que j ai fait initialement ne fonctionne pas
|
|
|
|
|
Logged
|
|
|
|
|
83 - var
Offline
Sr. Member
Karma: 0
Posts: 452
ARDUINO Powa !
|
 |
« Reply #23 on: May 10, 2012, 04:16:54 am » |
si tu veux mon avis, personne ne sera précisément ce qui marche pas a moins de prendre le code le tester et lignes après lignes bien surveiller tes variable etc, vue comme c'est fait je pense que tu a du te mélanger les pinceau et comme tu n'a pas choisie une structure claire il est dur de trouver facilement l’erreur, à mon avis une simple petite erreur, mets ça au claire et tu t'en sortira mieux, sinon tu mets des Serial.print partout histoire de suivre tes variable dans ton programme et bien voir que leur état est bon après déjà tu sera situer ou ce trouve le problème. bon courage quoi ^^
Skizo !
|
|
|
|
|
Logged
|
Un tien vaux mieux que deux tu l'auras !
|
|
|
|
France
Offline
Edison Member
Karma: 12
Posts: 1801
There is an Arduino for that
|
 |
« Reply #24 on: May 10, 2012, 06:12:02 am » |
par contre les classes sont à faire dans un .h et .cpp
ou on peut le faire directement dans le pde (c est un peu au dessus de mes compétences pour l instant) On peut créer une classe localement. Elle ne sera alors vue que dans le code où elle est déclarée. Ou alors on la crée dans un code extérieur et on l'inclut comme une librairie.
|
|
|
|
|
Logged
|
|
|
|
|
France
Offline
Edison Member
Karma: 12
Posts: 1801
There is an Arduino for that
|
 |
« Reply #25 on: May 10, 2012, 06:44:28 am » |
Je reste persuadé que l'utilisation des long est une complication qui peut masquer des problèmes et en plus on ne voit pas ce que l'on manipule. Avant d'en arriver à la création d'une classe, il y a une solution plus light. Création d'un type var_temps typedef struct var_temps{ unsigned char heure; unsigned char min; unsigned char sec; }
ensuite tu crées tes variables var_temps heureDebut; var_temps heureBrumi;
et tu peux les manipuler comme ça heureDebut.heure=8; heureDebut.min=25; heureDebut.sec=0;
il faut ensuite faire quelques outils une addition, une comparaison qui recevront en argument des variables de type var_temps. C'est quasiment le début d'une classe. /*Comparaison de 2 variables var_temps retourne 0 si égales 1 si t1 supérieure à t2 -1si t1 inférieure à t2 */ int compTemps(var_temps t1, var_temps t2){ if (t1.heure==t2.heure) and (t1.min==t2.min) and (t1.sec==t2.sec) return(0); if (t1.heure>t2.heure) return(1); if (t1.heure==t2.heure) and (t1.min>t2.min) return(1); if (t1.heure==t2.heure) and (t1.min==t2.min) and (t1.sec>t2.sec) return(1); if (t1.heure<t2.heure) return(-1); if (t1.heure==t2.heure) and (t1.min<t2.min) return(-1); if (t1.heure==t2.heure) and (t1.min==t2.min) and (t1.sec<t2.sec) return(-1); } C'est juste un exemple, c'est un peu boeuf comme codage et c'est pas testé. Pour utiliser ton DS1307 vat_temps curTime;
rtc.get(&h,&m,&s,....); curTime.heure=h; curTime.min=m; cur_Time.sec=s;
après tu peux utiliser les opérateurs créés // pour tester si une échéance est passée if (compTemps(curTime,heureDebut)==1){ .....}
|
|
|
|
« Last Edit: May 10, 2012, 06:52:59 am by fdufnews »
|
Logged
|
|
|
|
|
83 - var
Offline
Sr. Member
Karma: 0
Posts: 452
ARDUINO Powa !
|
 |
« Reply #26 on: May 10, 2012, 07:18:09 am » |
je rejoins fdufnews sur les long, une réel source de problème, toujours moyen de perdre des donné, dépassement, manipulation difficile, enfin bref, si tu peut faire autrement (on ce doute que ça va retourner ton code de la cave au grenier mais vaux mieux ça plutôt que ça ne marche pas, fait plusieurs versions au k ou ^^) fait le ça te simplifiera la vie !
Skizo !
|
|
|
|
|
Logged
|
Un tien vaux mieux que deux tu l'auras !
|
|
|
|
Offline
Edison Member
Karma: 6
Posts: 2430
|
 |
« Reply #27 on: May 10, 2012, 07:37:30 am » |
même constat vouloir absolument utiliser du long avec toutes les contraintes que cela implique pour gérer/comparer simplement de l'horodatation/temporisation est AMHA s'exposer à deconvenues.
en contraignant le raisonnement à (heures*60)+minutes la max est de 1440 (progression continue)
en contraignant le raisonnement en notation directe heure.minute le max est de 2400 (progression hachée)
|
|
|
|
|
Logged
|
|
|
|
|
France
Offline
Edison Member
Karma: 12
Posts: 1801
There is an Arduino for that
|
 |
« Reply #28 on: May 10, 2012, 08:59:18 am » |
en contraignant le raisonnement en notation directe heure.minute le max est de 2400 (progression hachée) Si je comprends bien tu proposes de coder heure minute sur un float. Ce n'est pas sans danger. Il y a régulièrement des problèmes avec les arrondis dus au codage des flottants. Par exemple, les tests d'égalité stricte sont à proscrire. Puis le système a ses limites. Si notre petit camarade désire ajouter le mois et la date on ne va plus y arriver. Je continue à militer pour une classe ou une structure avec les opérateurs associés.
|
|
|
|
« Last Edit: May 10, 2012, 09:21:54 am by fdufnews »
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 6
Posts: 2430
|
 |
« Reply #29 on: May 10, 2012, 09:53:46 am » |
en contraignant le raisonnement en notation directe heure.minute le max est de 2400 (progression hachée) Si je comprends bien tu proposes de coder heure minute sur un float. Ce n'est pas sans danger. Il y a régulièrement des problèmes avec les arrondis dus au codage des flottants. Par exemple, les tests d'égalité stricte sont à proscrire. Puis le système a ses limites. Si notre petit camarade désire ajouter le mois et la date on ne va plus y arriver. Je continue à militer pour une classe ou une structure avec les opérateurs associés. bonjour fdfunews ha non surtout pas de float  de la concaténation entiere pouvant tout autant etre facilement derivée, c'est comme en tout , il faut aussi savoir ce que l'on manipule et comment. mais une bonne classe simple d'utilisation de manipulation de datation est surement la meilleure méthode, je suis étonné d'ailleurs que cela n'existe pas déjà simplement ?
|
|
|
|
|
Logged
|
|
|
|
|
|