Faire défiler un texte sur l’afficheur
Dans les paragraphes précédents, nous avons parcouru les principales méthodes de pilotage d’un afficheur 7 segments MAX7219 avec Arduino. Pour aller un plus loin, je partage avec vous le code logiciel permettant de faire défiler un texte à l’écran.
Le code logiciel de ce défilement repose sur deux principes:
- Le message affiché est décalé d’1 cran sur la gauche toutes les 500ms.
- La fin du message est raccordée avec son début afin de produire un effet de rotation de l’affichage.
Dans cet exemple le message affiché est “1 2 3 … COUCOU JE SUIS LA ” . J’avoue j’étais en manque d’inspiration.
Les principales évolutions du code logiciel par rapport à ce que nous avons vu précédemment sont d’ordre algorithmique. Aussi je vous livre directement sans trop entrer dans les détails le code documenté:
// Déclaration des librairies utilisées #include "LedControl.h" // Bibliothèque de gestion de l'afficheur MAX7219 7 segments // Déclaration des fichiers du projet à inclure #include "Caracteres7Segments.h" // Constantes globales #define AFFICHAGE_INTERVAL_DEFILEMENT 500 // Déclarations globales LedControl afficheur_g=LedControl(11/*Broche DIN - Jaune*/, 12/*Broche CLK - Bleu*/, 10/*Broche CS - Vert*/); // Initialisation du contrôleur de l'afficheur 7 segments unsigned long heure_affichage_g = 0; void memoriser_heure_affichage() { heure_affichage_g = millis(); } bool temps_ecoule_depuis_affichage(unsigned long duree_p) { bool retour_l = false; if((millis() - heure_affichage_g) >= duree_p) { retour_l = true; } return(retour_l); } void afficher_avec_defilement(char *message_p) { static int index_affichage_l=0; char caractere_l; if(temps_ecoule_depuis_affichage(AFFICHAGE_INTERVAL_DEFILEMENT)) // L'intervalle de temps entre 2 affichages est-il écoulé ? { afficheur_g.clearDisplay(0); for(int ii_l=0;ii_l<8;ii_l++) { if ((index_affichage_l+ii_l)<strlen(message_p)) { caractere_l = message_p[index_affichage_l+ii_l]; } else { // Nous sommes à la fin de l'affichage du message, il est nécessaire d'afficher le début sur l'espace disponible caractere_l = message_p[(index_affichage_l+ii_l)-strlen(message_p)]; } afficheur_g.setRow(0,7-ii_l,pgm_read_byte(&tab_caracteres7_segments[caractere_l])); } if(index_affichage_l<(strlen(message_p)+8)) // Le message a-t-il entièrement défilé sur l'écran ? { // Non le message n'a pas entièrement défilé sur l'écran index_affichage_l++; } else { // Oui le message a entièrement défilé sur l'écran, on réassigne donc l'index d'affichage index_affichage_l=9; } memoriser_heure_affichage(); } } // Fonction de démarrage, s'exécute une seule fois: void setup() { afficheur_g.shutdown(0,false); // Allume l'afficheur afficheur_g.setIntensity(0,15); // Définit la luminosité (valeur de 0 à 15) } // Fonction principale du programme, s'exécute en boucle: void loop() { afficher_avec_defilement("1 2 3 ... COUCOU JE SUIS LA "); }
Et voilà le résultat:
Si cet article vous a plus ou bien si vous avez des suggestions, n’hésitez pas à me laisser un commentaire !
Pour continuer:
Si vous souhaitez continuer avec l’Arduino Uno, voici deux projets qui pourrait vous intéresser:
Salut Nico et merci pour ce post bien utile, serait-il possible d’avoir également ton code Arduino pour Flipper sur ce type d’afficheur, je suis en train de m’en faire un et je suis à la recherche de modèles de code. Merci encore et bonne année 2021 !
Pierre
Bonjour Pierre,
Tout d’abord, je te remercie pour ton commentaire.
L’électronique de flipper dont je parle dans cet article est un programme plutôt complexe pour être détaillé dans ce blog. Cette réalisation inclue des composant supplémentaires : des cartes d’extension MCP23017 ainsi que des switchs pour les cibles et les couloirs.
Cela fait partie des prestations facturées que je propose. (Si tu es intéressé par ces prestations, je te laisse me contacter directement ici : https://tropratik.fr/contact).
Bonjour,
Ecoutez, je n’ai qu’un mot à dire : “Génial”
Tout est bien explicite, clair et imagé.
J’ai lu tous vos articles (et j’ai commandé les accessoires nécessaires. Il me tarde de les recevoir (Commandé sur AliExpress délai très long malheureusement) pour mettre en pratique vos expèrience.
Merci à vous pour ce travail.
Cordialement Guy
Merci pour les encouragement Guy.
Afin de soutenir le site (frais d’hébergement, matériel et temps passé), n’hésitez pas à commander sur la boutique https://tropratik.fr/boutique.
De plus l’ensemble des produits de la boutique est stocké en France et expédiés en moins de 24h.
“La broche CLK est reliée à la sortie 12 de l’Arduino” ; oh que NON , CLK est la BROCHE 13 ; çà ne marchera jamais si CLK=12 …mais bon
Bonjour Joël,
je vous laisse faire l’essai, ce montage fonctionne parfaitement.
L’Arduino Uno possède une ressource matérielle dédiée pour le bus SPI, cependant les caractéristiques de l’afficheur 7 segments MAX7219 ne justifient pas la nécessité de l’utiliser.
Dans ce tutoriel nous avons choisi la librairie “LedControl by Eberhard Fahle” qui utilise des ressources logicielles, ce qui laisse la souplesse de faire son propre choix des broches SPI à utiliser.
Vous pouvez le vérifier en étudiant son code logiciel disponible ici.
Libre à vous de changer le brochage si vous le souhaitez. Il suffit simplement de changer les paramètres du constructeur LedControl.