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