11. Affichage de l'horloge
Maintenant que l’on peut afficher ce que l’on veut sur écran, l’objectif est d’y afficher une horloge numérique.
Génération des heures, minutes et secondes
Dans les parties précédentes, nous avons configuré un timer déclenche une fonction d’interruption toutes les secondes, précisément. Il s’agit donc d’une bonne base pour générer les heures, minutes et secondes qui seront affichés sur l’écran.
Comme toujours en programmation microcontrôleur, bien réfléchir à ce qui doit être fait dans la fonction d’interruption et ce qui doit être fait ailleurs…
Mise en forme
Pour formatter l’horloge dans une chaîne de caractère, le plus simple est certainement d’utiliser la fonction sprintf de la bibliothèque stdio.
Pour obtenir la documentation de sprintf, il suffit de taper dans un terminal :
man sprintf
On voit qu’elle fonctionne comme printf mais avec un argument en plus : une chaîne de charactère de destination.
Exemple :
char formatted_time[STRING_LENGTH]; // STRING_LENGTH: nombre de caractères après formatage + 1 (pour le '\0' de fin de chaîne)
sprintf(formatted_time, "%d:%d:%d", t.hours, t.minutes, t.seconds);
Résultat : 12:1:8
Comme printf, on peut forcer une mise en forme sur un nombre précis de caractères :
sprintf(formatted_time, "%2d:%2d:%2d", t.hours, t.minutes, t.seconds);
Résultat : 12: 1: 8
De même, on peut forcer l’affichage des 0 :
sprintf(formatted_time, "%02d:%02d:%02d", t.hours, t.minutes, t.seconds);
Résultat : 12:01:08