Salut,
Lorsque l'on utilise une horloge RTC I2C avec la bibliothèque "rtclib-master"
Comment récupérer le numéro de semaine.
A mon sens suivant les projets, if faut connaitre l'heure la date dans d'autre cas le numéro de semaine et l'heure sont plus pertinent.
Merci d'avance
Des horloges "RTC" il en existe des dizaines de modèles, beaucoup respectent un semblant de normalisation mais rien n'est obligatoire.
Quel est ton modèle ?
Sans cette information personne ne pourra te répondre.
Je ne connais pas la bibliothèque dont tu parles mais sache que dans une bibliothèque il y a deux fichiers : h et cpp (ou c) , plus des fichiers d'exemples et de documentation.
En absence de documentation digne de ce nom il faut ouvrir le fichier h qui contient les déclarations des variables et des fonctions (méthodes en cpp) et voir s'il existe une méthode qui revoie le numéro de semaine.
Une lecture de la documention technique de la RTC (datasheet) est aussi fort instructive.
Et également le lien vers ta librairie, car elle s'appelle toute rtclib-master ou presque!
68tjs:
Des horloges "RTC" il en existe des dizaines de modèles, beaucoup respectent un semblant de normalisation mais rien n'est obligatoire.
Quel est ton modèle ?
Sans cette information personne ne pourra te répondre.Je ne connais pas la bibliothèque dont tu parles mais sache que dans une bibliothèque il y a deux fichiers : h et cpp (ou c) , plus des fichiers d'exemples et de documentation.
En absence de documentation digne de ce nom il faut ouvrir le fichier h qui contient les déclarations des variables et des fonctions (méthodes en cpp) et voir s'il existe une méthode qui revoie le numéro de semaine.
Une lecture de la documention technique de la RTC (datasheet) est aussi fort instructive.
68tjs:
Des horloges "RTC" il en existe des dizaines de modèles, beaucoup respectent un semblant de normalisation mais rien n'est obligatoire.
Quel est ton modèle ?
Sans cette information personne ne pourra te répondre.Je ne connais pas la bibliothèque dont tu parles mais sache que dans une bibliothèque il y a deux fichiers : h et cpp (ou c) , plus des fichiers d'exemples et de documentation.
En absence de documentation digne de ce nom il faut ouvrir le fichier h qui contient les déclarations des variables et des fonctions (méthodes en cpp) et voir s'il existe une méthode qui revoie le numéro de semaine.
Une lecture de la documention technique de la RTC (datasheet) est aussi fort instructive.
Effectivement c'est pas bête
DS1307
dudux2:
Et également le lien vers ta librairie, car elle s'appelle toute rtclib-master ou presque!
Voici :
Tu as la réponse à ta question dans :
*) le fichier RTClib.h
**) La datasheet du DS1307 ( gogole puis recherche DS1307 datasheet)
Ici on ne fourni pas du tout cuit, on fait tout pour les gens deviennent autonomes. Alors tu commence par regarder les deux documents que je viens de citer, surtout le premier qui est suffisant à lui tout seul.
Et si tu n'arrive pas à trouver la réponse soit sans crainte on t'aidera.
68tjs:
Tu as la réponse à ta question dans :
*) le fichier RTClib.h
**) La datasheet du DS1307 ( gogole puis recherche DS1307 datasheet)Ici on ne fourni pas du tout cuit, on fait tout pour les gens deviennent autonomes. Alors tu commence par regarder les deux documents que je viens de citer, surtout le premier qui est suffisant à lui tout seul.
Et si tu n'arrive pas à trouver la réponse soit sans crainte on t'aidera.
Merci pour ta réponse
Ta démarche est tout à fait louable...
Mais je suis surement un boulet car je n'ai pas trouvé
La seule solution que j'entre aperçois serait de me lancer dans un lourd algo incluant jour mois années etc...
Ce qui alourdirait le code
L'éditeur du forum à l'air d'être en carafe cela va pas être simple :
Dans le fichier RTClib.h on trouve entre autre les déclarations de méthodes :
uint16_t year() const { return 2000 + yOff; }
uint8_t month() const { return m; }
uint8_t day() const { return d; }
uint8_t hour() const { return hh; }
uint8_t minute() const { return mm; }
uint8_t second() const { return ss; }
uint8_t dayOfWeek() const;
On voit bien une fonction dayOfWeek mais pas de fonction weekOfYear donc ce n'est pas possible.
Un coup d'oeil dans la datasheet du DS1307 (image jointe) montre que le DS1307 n'a pas de registre weekOfYear.
C'est donc normal que la bibliothèque RTClib qui sert à gérer le composant n'ait pas ajouter cette fonction. Il ne te reste plus qu'a te mettre devant un clavier.
Bonjour,
Un peu de lecture sur le sujet :
Définition semaine 1
Numéro semaine
stigmate101:
La seule solution que j'entre aperçois serait de me lancer dans un lourd algo incluant jour mois années etc...Ce qui alourdirait le code
Voici
Et si c'est "trop lourd" tu peux toujours le mettre dans une librairie en dehors de ton code principal
//calcul quantième
uint16_t quantiemeDate(uint8_t jour, uint8_t mois, uint8_t annee_sur_2_chiffres)
{
uint16_t quantieme;
uint8_t i;
quantieme = jour;
for (i=1; i<mois; i++)
{
switch (i)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
quantieme += 31;
break;
case 4:
case 6:
case 9:
case 11:
quantieme += 30;
break;
case 2:
quantieme += 28 + !(annee_sur_2_chiffres & 3);
break;
}
}
return quantieme;
}
//calcul numéro de semaine
uint8_t numeroSemaine(uint8_t jour, uint8_t mois, uint8_t annee_sur_2_chiffres)
{
uint32_t refjour;
uint16_t semaine;
refjour = ((uint32_t)annee_sur_2_chiffres*1461 + 3) >> 2;
semaine = ((((uint16_t)refjour+1) % 7) + 3 + quantiemeDate(jour,mois,annee_sur_2_chiffres)) / 7;
return (uint8_t) semaine;
}
C'est très adapté aux RTC de nos arduino, où l'année est gérée sur deux chiffres sans le siècle.
Certifié sans bug
La preuve dans le fichier joint
testnumsemaine.cpp (3.32 KB)
68tjs:
L'éditeur du forum à l'air d'être en carafe cela va pas être simple :Dans le fichier RTClib.h on trouve entre autre les déclarations de méthodes :
uint16_t year() const { return 2000 + yOff; }
uint8_t month() const { return m; }
uint8_t day() const { return d; }
uint8_t hour() const { return hh; }
uint8_t minute() const { return mm; }
uint8_t second() const { return ss; }
uint8_t dayOfWeek() const;
On voit bien une fonction dayOfWeek mais pas de fonction weekOfYear donc ce n'est pas possible.Un coup d'oeil dans la datasheet du DS1307 (image jointe) montre que le DS1307 n'a pas de registre weekOfYear.
C'est donc normal que la bibliothèque RTClib qui sert à gérer le composant n'ait pas ajouter cette fonction. Il ne te reste plus qu'a te mettre devant un clavier.
C'est bien ce que j'avais constaté...
Effectivement je ne suis coutumier de fait de consulté toutes les bibliothèques car elles sont deja compilées!
Voila, ce qui me relance dans mon idée primaire existe-t-il un solution apporté par une fonction déjà existante qui fait bien son office.
Je suis partisan de ne pas réécrire ce qui l'a parfaitement été.
en effet construire ce petit bout d'algorithme n'est pas une petite affaire si je veux avoir quelque chose de réellement fonctionnel ..... Et je jeu de test va être long
Bricoleau t'a donné un code juste au-dessus
bricoleau:
VoiciEt si c'est "trop lourd" tu peux toujours le mettre dans une librairie en dehors de ton code principal
//calcul quantième
uint16_t quantiemeDate(uint8_t jour, uint8_t mois, uint8_t annee_sur_2_chiffres)
{
uint16_t quantieme;
uint8_t i;
quantieme = jour;
for (i=1; i<mois; i++)
{
switch (i)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
quantieme += 31;
break;
case 4:
case 6:
case 9:
case 11:
quantieme += 30;
break;
case 2:
quantieme += 28 + !(annee_sur_2_chiffres & 3);
break;
}
}
return quantieme;
}
//calcul numéro de semaine
uint8_t numeroSemaine(uint8_t jour, uint8_t mois, uint8_t annee_sur_2_chiffres)
{
uint32_t refjour;
uint16_t semaine;
refjour = ((uint32_t)annee_sur_2_chiffres*1461 + 3) >> 2;
semaine = ((((uint16_t)refjour+1) % 7) + 3 + quantiemeDate(jour,mois,annee_sur_2_chiffres)) / 7;
return (uint8_t) semaine;
}
C'est très adapté aux RTC de nos arduino, où l'année est gérée sur deux chiffres sans le siècle. Certifié sans bug :D La preuve dans le fichier joint
Salut
Un grand merçi
Lors de mon dernier post je n'avais pas actualisé mon navigateur :o et je ne voyais pas ta réponse.
Trop cool...