You are currently viewing Afficheur 7 segments MAX7219 avec Arduino

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:

S’abonner
Notification pour
guest
6 Commentaires
Le plus ancien
Le plus récent Le plus populaire
Commentaires en ligne
Afficher tous les commentaires
Pierre
Pierre
3 années il y a

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

VANOVERBERGHE GUY
VANOVERBERGHE GUY
2 années il y a

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

Joël
Joël
7 mois il y a

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