Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

Trouver l'écart entre deux dates !
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2597
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#21 Message par paulfjujo » lun. 12 sept. 2016 20:47

Jérémy a écrit :As tu télécharger la librairie en question ? ou fait une manipulation particulière ?


je l'ai trouvé dans le dossier MikroC , qui chez moi est sur le C :
C:\_MikroC\mikroC PRO for PIC\Examples\Other\Time

et je l'ai copié dans un dossier common
ou je stocke tous mes projets
C:\_MikroC\_MesProjets_MikroC\common\timelib.h



effectivement on ne voit pas la fonction ,Time_dateDiff
mais comme le dit Maï
on ne nous dit pas TOUT
Modifié en dernier par paulfjujo le mar. 13 sept. 2016 13:07, modifié 1 fois.
Aide toi, le ciel ou FantasPic t'aidera

Trouver l'écart entre deux dates !
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#22 Message par Guest » mar. 13 sept. 2016 08:20

peu plus supprimer dommage
Modifié en dernier par Anonymous le mar. 13 sept. 2016 08:33, modifié 1 fois.

Trouver l'écart entre deux dates !
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#23 Message par Guest » mar. 13 sept. 2016 08:27

Bonjour VOUS


Vous voyez le principe !
je ne serais pas a seconde prêt, car ces le pic qui cadencera mon chrono ! mais sur quelques jours le delta ne devrait pas tres gros genre 5 ou 10 secondes !

s'il n'est pas précis c'est que ton programme ou la résultante programme+ compilateur, n'est pas bonne .En ASM ,j'ai comme precision, la precision du QUARTZ qui pilote le timer.

Puisque tu n'es pas a 10 S prés. Pourquoi ne pas allumer le GSM prendre les données temps puis éteindre a nouveau et répéter ces cycles.

Autre solution sans rajouter de module (trop facile)avec le chrono calculer le calendrier.
Ou incrémenter un compteur cadencé par le chrono minute ,depuis le reçu du SMS.
De plus il faut que je puisse calculer en temps réel si la personne demande en cours de route le temps qu'il reste, grâce au mot clé "état" envoyer a mon module !

La je ne comprends pas, quel module? Pas le GSM puisque il est éteint.

Enfin pour résumer. Je trouve cela ,pas très simple, seul avantage, cela bouscule les 4 neurones qui ne reste. humour!! (pépé).Oui Paul, je peux encore extraire une racine carré avec, papier crayon, avantage je peux faire cela en ASM par contre un (pépé)

Bon il faut bien :lol: un tout petit peu, bon pas trop, c'est du sérieux chez Fantas-pic

Allez la suite

A+

PS reprend mon histoire de compteur, pourquoi ne pas décompter, depuis réception sms, butée déclenchement comme cela tu as le temps restant a envoyer a voir

Trouver l'écart entre deux dates !
Jérémy
Administrateur du site
Administrateur du site
Messages : 2725
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#24 Message par Jérémy » mar. 13 sept. 2016 08:54

Bonjour,

La rigolade est toujours bienvenue :langue:

Pour la précision pas de problème plus il sera précis mieux se sera , mais disons que c'est pas un chrono officiel pour un 100m .

Du coup cette conversation devrait sur retrouver sur mon post du GSM !.

Voila comment je voyais les choses, mais c'est certainement pas la meilleure façon j'en conviens .

Comme cela sera sur batterie , il convient de minimiser le courant de veille. Paul n'as pas réussi a le faire descendre très bas en consommation, je doute faire mieux . donc 20-30 ma c'est trop pour tenir plusieurs jours. J'ai donc décidé d’éteindre complétement le module GSM en fonction du temps restant.

Par exemple un réveil prévu dans 3 jours, réveillera le module 1 fois par heure pour checker l'arrivé d'un nouveau "STOP"' par exemple.
A 1 heure du réveil on pourra réveiller le module toutes les 5 minutes . et à 10 minute de la fin il reste éveillé pour checker un arrêt éventuelle au dernier moment !

Le texto "ETAT" pourra alors être décalé dans le temps, suivant si le module s'allume dans 29 minutes ou 1 minutes !
mais dans tous les cas le chrono tourne toujours ! et le pic lui est toujours en éveil !

Mais j'avoue que c'est déjà pas très clair dans ma tête alors de la à l'expliquer lol ! Surtout que j'ai la mauvaise manie de changer d'avis, quand je rencontre un problème lors de la programmation !

PS : pour le code Paulfjujo , j'ai trouvé ! en fait il faut rajouter le HEADER timelib.h au projet existant. je ferais le test ce soir mais je pense que c'est LA bonne solution . de plus la troisième fonction qu'il parle dans l'exemple c'est en fait une macro qui se trouve dans le Header !

Je vais essayer de résumé :

J'envoie un texto au format bien défini mot cles et données : reveil JJ/MM/AA hh/mm/ss
Dans ce SMS c'est la date du reveil.
Quand le SMS arrvie sur le module j'enregistre le Gdh fournis par le module lui même. Ce Gdh je le transforme et le mets au format de la fonction epoch .
Je calcul la différence entre la date de réception du SMS et la date indiqué par ce dit SMS !

J'obtiens une valeur en seconde . Je la place dans mon chrono , et je le lance . Mon PIC toute les secondes décrémente cette valeur . je peux donc éteindre mon module GSM .
Je le rallume de temps en temps seulement pour voir si j'ai pas reçu un SMS soit d’arrêt du chrono , soit de demande d’état du chrono . cela entrainera forcement une certaine latence entre la question et la réponse . Je pourrais envisager de réveiller le module GSM toute les 1/2 heures rondes . genre 15h00 15h30 16h00 . Ainsi je serais quand ma réponse va arriver . C'est une idée !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Trouver l'écart entre deux dates !
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#25 Message par Guest » mar. 13 sept. 2016 09:40

je suppose que tu as aussi pensé, avec le chrono, faire via le chargeur du GMS .Une recharge toute les 2 jours, pendant 1Heure par exemple.
c'est aussi une solution.qui règle pas mal de problèmeS :wink:

Trouver l'écart entre deux dates !
Jérémy
Administrateur du site
Administrateur du site
Messages : 2725
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#26 Message par Jérémy » mar. 13 sept. 2016 11:10

je suppose que tu as aussi pensé, avec le chrono, faire via le chargeur du GMS .Une recharge toute les 2 jours, pendant 1Heure par exemple.
c'est aussi une solution.qui règle pas mal de problèmeS :wink:


Non je n 'y avais pas pensé c'est une super idée ca ! . :bravo:
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Trouver l'écart entre deux dates !
Jérémy
Administrateur du site
Administrateur du site
Messages : 2725
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#27 Message par Jérémy » mer. 14 sept. 2016 07:13

Bonjour,

Hier je n'ai pas eu de temps pour tester la fonction , je le ferais ce soir !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Trouver l'écart entre deux dates !
Jérémy
Administrateur du site
Administrateur du site
Messages : 2725
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#28 Message par Jérémy » jeu. 15 sept. 2016 20:49

Bonsoir,

Je sèche sur un point et je comprends pas ce qui se passe .

Je vous mets seulement les parties du code intéressantes.
Le fichier Header:

Code : Tout sélectionner

#define Time_secInMn    60                      // seconds per minute
#define Time_secInH     (Time_secInMn * 60)     // seconds per hour
#define Time_secIn24h   (Time_secInH * 24)      // seconds per day

typedef struct
        
{
        unsigned char   ss ;    // seconds
        unsigned char   mn ;    // minutes
        unsigned char   hh ;    // hours
        unsigned char   md ;    // day in month, from 1 to 31
        unsigned char   wd ;    // day in week, monday=0, tuesday=1, .... sunday=6
        unsigned char   mo ;    // month number, from 1 to 12 (and not from 0 to 11 as with unix C time !)
        unsigned int    yy ;    // year Y2K compliant, from 1892 to 2038
        } TimeStruct ;

extern  long            Time_jd1970 ;   // 01/01/1970 julian day number

long    Time_dateToEpoch(TimeStruct *ts) ;
void    Time_epochToDate(long e, TimeStruct *ts) ;

#define Time_dateDiff(t1, t2) (Time_dateToEpoch(t2) - Time_dateToEpoch(t1))   



Déclaration

Code : Tout sélectionner

char Val_diff[15];
char Val_epoch1[15];
char Val_epoch2[15];

TimeStruct ts1, ts2 ;
unsigned long epoch1, epoch2, diff ;


Ma fonction

Code : Tout sélectionner

void Configure_Reveil(){ 

       ts1
.ss = 0 ;
       ts1.mn = 0 ;
       ts1.hh = 17 ;
       ts1.md = 12 ;
       ts1.mo = 9 ;
       ts1.yy = 2016 ;

       ts2.ss = 0 ;
       ts2.mn = 0 ;
       ts2.hh = 18 ;
       ts2.md = 12 ;
       ts2.mo = 9 ;
       ts2.yy = 2016 ;
       
      epoch1 
= Time_dateToEpoch(&ts1) ;
      epoch2 = Time_dateToEpoch(&ts2) ;

      diff = 1234567890;
      
      LongWordToStr
(diff, Val_diff);
      LongWordToStr(epoch1, Val_epoch1);
      LongWordToStr(epoch2, Val_epoch2);

     }


Et l'envoi par SMS

Code : Tout sélectionner

  
UART1_Write_Text
("RDV\r\n");
UART1_Write_Text(Val_diff);
UART1_Write_Text("\r\n");
UART1_Write_Text(Val_epoch1);
UART1_Write_Text("\r\n");
UART1_Write_Text(Val_epoch2);
UART1_Write_Text("\r\n");


Et je recois mon SMS, mais la partie diff reste vierge !

je recois :
RDV

1473699600
1473703200
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Trouver l'écart entre deux dates !
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2597
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#29 Message par paulfjujo » jeu. 15 sept. 2016 21:04

curieux !
le compilo le transforme peut etre en constante ?


unsigned long epoch1, epoch2;
unsigned Long diff =0L;



puis essaie avec
diff = 1234567890L;
Aide toi, le ciel ou FantasPic t'aidera

Trouver l'écart entre deux dates !
Jérémy
Administrateur du site
Administrateur du site
Messages : 2725
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#30 Message par Jérémy » jeu. 15 sept. 2016 21:11

Ok j'essaye merci paul .

Entre temps j'ai essayé comme ca pour la fonction:

Code : Tout sélectionner

void Configure_Reveil(){  // reveil 25/02/16 11/05/12

       
ts1.ss ;
       
ts1.mn ;
       
ts1.hh 17 ;
       
ts1.md 12 ;
       
ts1.mo ;
       
ts1.yy 2016 ;

       
ts2.ss ;
       
ts2.mn ;
       
ts2.hh 18 ;
       
ts2.md 12 ;
       
ts2.mo ;
       
ts2.yy 2016 ;

      
epoch1 Time_dateToEpoch(&ts1) ;
      
epoch2 Time_dateToEpoch(&ts2) ;

      
diff 1234567890;
      
      
LongWordToStr(diffVal_diff);
     
// LongWordToStr(epoch1, Val_epoch1);
     // LongWordToStr(epoch2, Val_epoch2);

     


Je reçois bien :
RDV
1234567890


Si je mets (j’enlève la deuxieme conversion des commentaires):

Code : Tout sélectionner

      LongWordToStr(diffVal_diff);
    
LongWordToStr(epoch1Val_epoch1);
     
// LongWordToStr(epoch2, Val_epoch2); 


Je recois
RDV

1473699600


Toujours l'espace vide ????
C'est en faisant des erreurs, que l'on apprend le mieux !!!


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 121 invités