Comment afficher l'heure pour votre projet d'horloge Arduino

Une fois que vous avez quelque chose sur l'écran pour votre projet Arduino Horloge, il est temps de lire l'heure à partir du module RTC et l'afficher. Plus tard, vous ajoutez des boutons pour programmer l'alarme, et un commutateur de changer entre affichage de l'heure, réglage de l'alarme, et les modes armées d'alarme.

Il ya vraiment seulement deux choses que vous pouvez afficher avec cette horloge: soit l'heure ou le temps que vous voulez que l'alarme se déclenche. Plutôt que d'inclure le code à la fois dans la principale boucle (), il est logique de mettre la procédure d'affichage dans sa propre fonction.

Ajouter le code suivant à la section des déclarations variable en haut de votre code:

RTC_DS1307 rtc- // Créer une horloge en temps réel appelé rtcLiquidCrystal LCD (12, 11, 5, 4, 3, 2) - // Création d'un écran LCD appelé lcdDateTime maintenant-

Cela crée un objet DateTime appelé maintenant. L'objet DateTime est partie de la bibliothèque RTC et est la seule façon d'obtenir le temps hors du module RTC, mais il a beaucoup d'options et peut fournir des heures, minutes, secondes, et l'année, mois et jour.

Ensuite, ajoutez le code dans votre boucle principale qui lit l'heure actuelle à partir du module RTC, et ajouter une fonction de mettre à jour l'affichage avec l'heure actuelle:

void loop () {= maintenant de rtc.now () - // obtenir l'heure actuelle // Rafraîchissement displayupdateDisplay () -}

La maintenant Objet DateTime stocke l'heure actuelle de la prise rtc.now () fonction pour afficher l'heure et pour vérifier si il est temps de déclencher l'alarme.




Pour garder le code modulaire, mise à jour de l'affichage se fait dans sa propre fonction, en dehors de la boucle principale. Après la fermeture de la boucle principale, ajouter le updateDisplay () fonction en entrant le code suivant:

annuler updateDisplay () {int h = now.hour () - // Obtenez les heures en ce moment et les stocker dans un entier appelé soupçon m = now.minute () - // Obtenez les minutes dès maintenant et de les stocker dans un nombre entier appelé la menthe s = now.second () - // Obtenez les secondes dès maintenant et de les stocker dans un entier appelé slcd.setCursor (0, 0) - // Placez le curseur à la colonne zéro, rangée supérieure ... lcd. print ("Le temps est:") - // ... avec des espaces pour effacer des caractères à partir de la mise en alarm.lcd.setCursor (4, 1) - // Déplacer le curseur à la colonne quatre, rowif inférieure (HLT; 10) { // Ajoutez un zéro, si nécessaire, comme abovelcd.print (0) -} lcd.print (h) - // Afficher le hourlcd.setCursor courant (6, 1) - // Déplacement à la prochaine columnlcd.print (" : ") - // et imprimer les colonlcd.setCursor (7, 1) - // Déplacer vers le columnif suivante (MLT; 10) {// Ajoutez un zéro, si nécessaire, comme abovelcd.print (0) -} lcd .print (m) - // Afficher la minutelcd.setCursor courant (9, 1) - // déplace à la prochaine columnlcd.print (":") - // et imprimer les colonlcd.setCursor (10, 1) - / / Déplacer vers le columnif prochaine (slt; 10) {// Ajoutez un zéro, si nécessaire, comme abovelcd.print (0) -} lcd.print (s) - // Afficher le deuxième courant}

Envoyer ce code à votre Arduino et de voir ce qui se passe. Si tout va bien et votre code compile correctement, vous devriez être en affaires! L'écran devrait afficher un temps qui correspond à celle sur votre ordinateur.

Dans le code, l'heure actuelle est demandé à la maintenant objet et placé en trois variables entières utilisées uniquement dans le updateDisplay fonction. Ces variables ont un portée locale, ce qui signifie qu'ils ne peuvent être utilisés à l'intérieur updateDisplay (), et le reste du programme ne sait rien d'eux - ce qui explique pourquoi ils ne sont pas déclarés au début de votre code.

Vous demandez minutes de temps, heures et secondes séparément avec now.hours (), (now.minutes), et (now.seconds). Affectation de chacune de celles-ci séparément à son propre variable entière (h, m, s et) est beaucoup plus facile que de demander l'heure actuelle à la fois.

Après avoir analysé le temps en trois variables, la principale chose se passe dans updateDisplay () est positionnant le curseur sur l'écran LCD et l'impression du texte pertinent. Positionner le curseur se fait avec lcd.setCursor (), qui prend deux paramètres: numéro de colonne et numéro de ligne. Réglage du curseur ne met dans la position correcte.

Vous avez alors de dire ce que l'affichage d'imprimer. La numérotation commence à zéro, de sorte que le caractère supérieur de gauche est dans la colonne 0 et la ligne 0. Le curseur est positionné en haut à gauche de l'écran et la première ligne de texte est imprimé avec lcd.print (“ le temps est: ”).

Vous pouvez utiliser le lcd.clear () fonction, ce qui efface tout le texte sur l'écran entier. Cependant, votre horloge est constamment rafraîchissant l'écran, de sorte que l'écran LCD de compensation chaque fois que le updateDisplay () exécute de fonction peuvent introduire un peu de scintillement perceptible. Une approche plus simple (qui utilise une instruction moins) est juste à écrire les caractères d'espace sur ce qui aurait déjà été sur l'affichage.

Ensuite, le curseur est déplacé quatre espaces vers la droite et sur la deuxième ligne, de sorte que le temps est centrée sur l'écran:

lcd.setCursor (4,1) -

Un peu difficile sur l'utilisation des nombres entiers pour obtenir les heures, minutes et secondes, est qu'ils ne disposent pas d'un zéro pour des valeurs inférieures à 10. Vous devez ajouter ceux manuellement, à la fois pour rendre l'horloge regarder à droite (par exemple, 01 : 05) et de garder les minutes et les secondes de heures au même endroit sur l'écran.

Ajout des zéros est réalisé de la même manière pour les heures, minutes et secondes:

si (HLT; 10) {// Ajoutez un zéro, si nécessaire, comme abovelcd.print (0) -} lcd.print (h) - // affiche l'heure actuelle

Le conditionnel si tests de déclaration si le temps actuel est inférieur à 10, et si oui, le impression() déclaration imprime un zéro. Après cela, l'écran LCD passe automatiquement à la position de la colonne suivante, alors quand vous imprimez l'heure actuelle, stockée dans la variable entière h, elle aura un zéro de tête. La même chose vaut pour les minutes et les secondes.

Vous devez également faire avancer le curseur à la position correcte pour le zéro pour les minutes et les secondes. Vous insérez une virgule entre eux avec le lcd.print (“: ”) - déclaration.


» » » » Comment afficher l'heure pour votre projet d'horloge Arduino