A la demande de quelques lecteurs , je suis en train de modifier mon script , afin de prendre en compte la gestion des Zones , ce qui permet à un seul module WEMOS ( Esp8266 ) , la possibilité de simuler plusieurs zones d’affichage.
Par exemple : Une Zone qui affiche l’heure , et une autre pour les notifications.
Je profite donc de cette demande ,pour écrire cet article, qui a pour but d’expliquer brièvement comment utiliser les Zones sur un affichage Matrix Led , avec la bibliothèque Parola.
La gestion des zones permets d’afficher différentes informations , sur deux ou plusieurs portions de votre affichage.
Comment ça marche .
Avec un seul contrôleur , vous allez avoir la possibilité de commander plusieurs affichages dans l’intégralité de votre matrice.
Il vous suffit de monter , les matrice en série , comme expliquer dans mon précèdent article.
Définition des Zones :

Dans cette exemple , nous avons 9 modules montés en serie , et nous désirons les découpés en 3 zones distinctes d’affichage.
le premier module commence avec la valeur 0.
Pour définir une Zone , nous utiliserons la fonction :
P.setZone(0, 0, 3);
0 : numéro de la Zone ( la première commence à Zero )
0,3 : Numéro du premier module ,Numero de dernier module -1 , concerné par la Zone.
Exemple :
P.setZone(1, 4, 6); définit la zone 2 entre le module n°4 et N° 4. ( soit les modules 5 ,6 et 7 )
P.setZONE(2,7 ,8); pour la dernière Zone.
Initialisation des Zones :
l’instruction : P.begin(3); permet d’initialiser les trois Zones.
Attention si on utilise P.begin(zone) , avec zone > 1 , ne pas utiliser l’instruction P.print(‘texte a afficher ») , car cela bloque le scenario , et l’écran reste coincé sur cette affichage.
Affichage dans une Zone :
Pour afficher un texte dans une Zone , on utilise l’instruction suivante :
P.displayZoneText(numero_zone, chaine caractère ,Position, SPEED_TIME, PAUSE_TIME, fx entree, fx sortie }
avec pour paramètre :
- Numéro de Zone
- Chaine de caractère à afficher
- Position : Gauche , Droite , centre
- Vitesse d’exécution
- Temps de pause , avant de passer à l’animation suivante
- Effet d’entrée ( scrolling gauche , scrolling droite , transition verticale haute …….. )
- Effet de sortie ( les mêmes que pour l’entrée )
Par exemple :
P.displayZoneText(0, Notif,PA_CENTER, 25, 0, PA_PRINT_PA_NO_EFFECT)
affichera dans la Zone 0 , la Notif , centré sur l’écran , sans effet .
Contrôle des animations :
La fonction P.displayAnimate() , permet , en plus d’exécuter les animations , de renvoyer l’info true . L’inconvénient avec les Zones , c’est que l’info true , est envoyé dés qu’une animation est terminé sur une des Zones.
Pour un contrôle plus précis de chaque Zone , il faut utiliser la fonction : P.getZoneStatus(numéro_zone) qui envoie true à chaque animation fini pour la zone sélectionné.
Ce qui nous donne le script ci-dessous :
Un petit exemple pour monter l’animation sur une matrice de 8 modules , d’un affichage sur deux Zones.
Affichage dans la Zone 1 ( la plus a gauche ) : Z 1 , avec un effet de scroll vertical. Et dans la zone 0 , le texte « Affichage Zone 0 » , avec un effet de scrolling gauche .
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 8
#define MAX_ZONES 2
#define TAILLE_ZONE MAX_DEVICES/MAX_ZONES
#define CLK_PIN D5
#define DATA_PIN D7
#define CS_PIN D6
char Notif[40];
// Hardware SPI connection
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
// Arbitrary output pins
// MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
#define SPEED_TIME 25
#define PAUSE_TIME 1000
void setup(void)
{
P.begin(MAX_ZONES);
P.setZone(0, 0, TAILLE_ZONE-1);
P.setZone(1, TAILLE_ZONE, MAX_DEVICES-1);
P.displayZoneText(0, Notif,PA_CENTER, SPEED_TIME, PAUSE_TIME, PA_PRINT,PA_NO_EFFECT);
P.displayZoneText(1, "Z-1",PA_CENTER, SPEED_TIME, PAUSE_TIME, PA_PRINT,PA_NO_EFFECT);
}
void loop(void)
{
if (P.displayAnimate()) // animates and returns true when an animation is completed
{
for (uint8_t i=0; i<MAX_ZONES; i++)
{
if (P.getZoneStatus(i))
{
strcpy(Notif,"Affichage sur Zone 0");
P.setTextEffect(0, PA_SCROLL_LEFT, PA_CLOSING);
P.setTextEffect(1, PA_SCROLL_UP, PA_SCROLL_UP);
// tell Parola we have a new animation
P.displayReset(i);
}
}
}
}
Vous avez toutes les clés en main , pour adapter vos sketch , avec la gestion des zones , si vous le souhaitez.
Pour info , une nouvelle version , de mon script , pour le contrôle de l’horloge avec notification , prendra en charge les Zones.

2 commentaires sur “Gestion des Zones sur Affichage Matrix led 72xx avec bibliothèque MD_PAROLA”
Superbe merci