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 !

Cet article a 2 commentaires

  1. Pierre

    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

  2. Nico

    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).

Laisser un commentaire