Les Carnets de Byfeel domotique , Objets connectés , DIY , Programmation, Nouvelles Technologies ….

Gestion des Zones sur Affichage Matrix led 72xx avec bibliothèque MD_PAROLA

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 :

exemple de découpage sur une matrice composée de 9 Modules

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”

Les commentaires sont fermés.