Topic "DS1307 et RTCLib mettre l'heure manuellement"

Flux RSS des posts récents dans ce topic ( Flux Atom)


Pas de photo de profil

weetoz

Membre

#271 | Signaler ce message


Bonjour à toutes et à tous,

j'ai un p'tit projet de portail pour un poulailler à faire pour une tierce personne. Le but est simple: Le portail s'ouvre et se ferme à des heures défini par l'utilisateur via une IHM composée de: -Un LCD 2x16 caractères. -Un encodeur incrémental avec bouton poussoir.

Cet appareil sera autonome, une fois mise en place, pas de port USB ni Ethernet et pas de DCF77 non plus. Par conséquent, les changement d'heure été/hiver et les corrections de dérive devront ce faire via l'encodeur et son bouton poussoir.

N'ayant pas trop de temps à consacrer pour ce projet, j'ai décidé d'utiliser la librairie RTCLib-master.

Je voudrais créer une fonction "setTimeUser" afin que l'utilisateur puisse régler l'heure dans le DS1307. Fonctionnement:

  1. Avec l'encodeur on sélectionne la page "Réglage date et heure".

  2. On appui sur le BP pour valider, ce qui fait rentrer dans la fonction "setTimeUser". Sur la seconde ligne du LCD, l'heure courante s'affiche ainsi que le curseur du LCD.

  3. On sélectionne le paramètre (Année, Mois, Jour, Heure, Minute)avec l'encodeur upis on appuie sur le BP pour valider.

  4. De là, on rentre à nouveau dans une autre fonction (ex: setMinute), la fonction récupère les minutes courantes grâce à la commande rtc.now(); varMinute=now.minute; qui permettra à l'utilisateur de faire varier la valeur tout en pouvant la visualiser sur le LCD.

  5. Une fois que l'utilisateur à sélectionné les minutes voulu, il clique sur le BP pour valider.

  6. Enfin, on récupère à nouveau les variables "date_Time", puis on remplace les anciennes minutes par les nouvelles et on envoie tout ça au DS1307.

Ce mode de fonctionnement n'est pas très plaisant, il est par défaut car ne connaissant que très peu le C++, il me parait le plus accessible. J'aurais préféré seulement envoyer au DS1307 le paramètre modifié. Par exemple: Wire._I2C_WRITE(bin2bcd(dt.minute())); en remplaçant dt.minute par 0x01. Cette manière de procédé me parait plus sûre, mais est-elle fonctionnelle?

Merci d'avance. Weetoz.

Derniére modification le par weetoz


Photo de profil de skywodd

skywodd

Membre

Membre du staff

#277 | Signaler ce message


Salut,

Voila ce que je ferai personnellement :

  • Avec l'encodeur on sélectionne le menu "Réglage date et heure".

  • On appui sur le BP pour valider l'entrée dans le menu.

  • L'afficheur affiche "Choisir l'année" sur la première ligne et l'année courante sur la seconde ligne (appel de la fonction rtc.now().year() juste avant l'affichage). L'encodeur permet d'ajuster la valeur en tournant à droite ou à gauche.

  • On appui sur le BP pour valider la saisie.

  • On recommence les deux étapes ci-dessus pour le mois, le jours, l'heure puis les minutes.

  • A chacune des étapes précédentes, une variable est mise à jour avec la saisie de l'utilisateur. Une fois la dernière validation des minutes effectuées, le code instancie un objet DateTime nouvelle_date(annees, mois, jours, heures, minutes); avec ces variables. Pour finir le code appelle la fonction rtc.adjust(nouvelle_date); pour mettre à jour le module RTC.


Pas de photo de profil

weetoz

Membre

#294 | Signaler ce message


Bonsoir skywodd, merci pour ta réponse.

le code instancie un objet

1
DateTime nouvelle_date(annees, mois, jours, heures, minutes);

avec ces variables.

par Skywodd

Bon ben je crois que ça y est, je ne peux plus trop contourner le C++!! :p

Bon, comme qui dirait: quand faut y aller… à dans cinq ou dix ans les Makers!!!


Photo de profil de skywodd

skywodd

Membre

Membre du staff

#297 | Signaler ce message


Bon ben je crois que ça y est, je ne peux plus trop contourner le C++!! :p

par weetoz

Personne ne peux éviter éternellement le pouvoir de la programmation objet ! ]:)


Pas de photo de profil

weetoz

Membre

#302 | Signaler ce message


C'est sûre!! Si Sangoku ne c'était pas transformé en super sayen… Ah non, pas tout à fait le même but!

Bon heureusement, on ne manque pas de cours et tuto sur le C++, c'est plus de temps qu'il me manque. En ce moment le langage quotidien c'est le Lader. Rien à voir ( et encore que…) mais celà reste intéressant…