11) Expérimentation d’un affichage sur matrice de diodes.

Expérience sur le multiplexage serait un titre plus approprié, car pour cette version nous allons utiliser non pas une colonne de huit LEDs, mais une matrice de 8 x 8 soit 64 LEDs 1088AS présentée sur la Fig.41 insérée sur un petit module pour Arduino que l’on peut trouver par exemple sur :
https://www.amazon.fr/AZDelivery-MAX7219-Dot-32-Module-daffichage-Arduino/dp/B07CRF13ZQ/ref=sr_1_6?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=3PZ50IUJ58STE&keywords=Dot+Matrix+MAX7219&qid=1693379394&sprefix=dot+matrix+max7219%2Caps%2C104&sr=8-6
L’afficher 1088AS comporte 64 LED arrangées en huit lignes et huit colonnes. La Fig.42 en présente le brochage lorsque ce composant est vu par le dessus. Les broches sont numérotées comme celles d’un circuit intégré de type DIL, toujours observé par dessus. Comme montré sur la Fig.43 les connecteurs sont conformes à son brochage interne. Notons au passage que si l’espacement entre deux broches sur le 1088AS fait bien les 2,54mm standard, la distance entre les deux lignes de broches n’est pas normalisée puisqu’elle fait 24,5mm ce qui ne correspond pas à exactement un pouce. La bibliothèque LedControl.h permet de gérer l’allumage des LED soit individuellement soit par « Rangées ». Pour programmer facilement une application en usant des procédures setLed et setRow il importe de faire le lien entre les coordonnées indiquées et la position de l’afficheur sur le module électronique. La Fig.44 précise l’ordre des lignes et des colonnes quand on programme LED par LED avec setLed en précisant leurs coordonnées. La Fig.45 pour son compte précise l’ordre des « rangées » pour setRow avec le symbole de l’OCTET dans lequel on précise par des « 1 » et des « 0 » l’état des LEDs dans le groupement traité. Mais comme nous codons librement les coordonnées ou le contenu des octets, on peut orienter l’afficheur comme on le désire et ainsi faciliter son orientation dans un boitier. Dans cette application, comme nous utilisons la bibliothèque LedControl.h (Également fournie dans ce tutoriel.) il n’est pas nécessaire de s’investir dans le fonctionnement interne du multiplexeur MAX7219, du coup nous pouvons directement passer à l’étude initiale du détecteur de CO2 pour sa version n°2.

Étude préliminaire du détecteur de CO2 version n°2.

Cette fois nous n’allons pas mettre la charrue avant le bÅ“ufs et nous précipiter, mais consacrer du temps pour envisager la façon dont on peut utiliser la matrice pour visualiser sous forme de colonnes trois paramètres différents. On maintiendra la présence du potentiomètre pour la vérification de l’appareil et le TIC/TAC de la boucle de base ce qui impose la présence du B.P. ainsi que celle de la LED blanche. En revanche la LED tricolore n’est plus indispensable et l’on va s’en passer. L’allure générale de l’appareil et l’orientation du module dans ce dernier sera celle proposée sur la Fig.46 le bouton du potentiomètre étant sur le coté du boitier et non en façade. Noter que l’afficheur matriciel est décalé à droite, car à gauche avec le MAX7219 le circuit imprimé déborde un peu plus.
Affihage sur les colonnes :
Plusieurs options sont possibles. Par exemple sur la Fig.47 en A les trois colonnes sont identiques. En B, pour le CO2 placée au centre la colonne est doublée et simple pour la température et l’hygrométrie. En C la colonne double pour le CO2 est placée à droite. An final c’est celle qui emporte ma préférence, car la Fig.46 montre qu’elle est favorable à une façade bien répartie et facile à interpréter. C’est donc cette configuration qui sera privilégiée dans les démonstrateurs.

L’affichage de l’origine d’un problème matériel sur les capteurs.

Chaque fois que l’on doit imaginer un protocole d’utilisation d’un appareil et de sa gestion pour le dialogue Homme/Machine une infinité de solution sont envisageables. Après avoir crayonné diverses possibilités sur des brouyons informatiques, j’ai fini par opter pour la solution de la Fig.48 dans laquelle c’est la matrice de LEDs qui sera mise à contribution. On peut librement se définir des caractères. Par exemple pour le « A » de Alerte la matrice fait 4 x 6. Comme il faut une colonne de séparation, il ne reste que 3 x 6 possible pour la matrices des chiffres. Bien qu’elle soit de faible définition, c’est celle qui sera adoptée et de manière d’autant plus pertinente que normalement ce type d’incident ne sera pas fréquent.

Dans le but de valider le matériel et les affectations relatives au pilotage de la matrice de LEDs par le multiplexeur MAX7219 on commence par installer la bibliothèque LedControl.h également présente dans le dossier <Bibliothèques> qui accompagne le didacticiel. Puis, ayant débranché les huit LEDs de la rampe lumineuse, on branche les trois lignes de pilotage du module électronique conformément aux informations du démonstrateur P08_Test_de_la_matrice_8x8.ino que naturellement on téléverse sur la carte Arduino. Pour expérimenter ce nouveau type d’afficheur, autant commencer par écrire des routines qui seront directement utilisables dans le futur programme d’exploitation. Nous allons créer la procédure Affiche_Alerte(Num_Alerte) dans laquelle on passe le numéro de l’alerte en paramètre Le moyen le plus rationnel consiste à créer des images sur l’afficheur 1088AS. En effet, les dessins de la Fig.48 font croire à du texte. Mais concrètement, pour la programmation ce ne sont pas des chaînes de caractères que l’on peut proposer à l’afficheur dont LedControl.h ne peut traiter que des points avec leurs coordonnées, ou des lignes dont on précise la position. La méthode consiste à décomposer chaque « image » de la Fig.48 en six lignes de huit PIXELs mémorisées dans six OCTETs avant de les soumette à la bibliothèque dédiée.

Technique de programmation des images et optimisation du code.

Avant d’émuler du texte, on va raisonner sur un exemple graphique, c’est à dire sur une vraie image proposée sur la Fig.49 qui utilise toute la matrice. Vous avez immédiatement reconnu une superbe rose en bouton ! Pour construire ce dessin, on pourrait éteindre la matrice, puis construire point par point le dessin en utilisant dix neuf fois l’instruction setLed avec pour chaque itération les deux coordonnée de la LED à allumer. On imagine assez bien que la taille du code qui résulterait de cette approche serait inutilement « obèse ». En opposition, la bonne technique consiste à définir les huit lignes à afficher dans un tableau d’OCTETS et à n’utiliser que huit fois l’instruction setRow. On peut alors se demander dans quel cas setLed s’avère pertinente. Et bien lorsque l’on ne doit modifier que quelques PIXELs sans rien modifier globalement sur la matrice, ou pour faire varier la longueur d’un trait dans une boucle de type for() par exemple. Dans notre application, nous allons vouloir afficher quatre images de six lignes soit 24 OCTETs à définir. Toutefois, on peut gagner de la place pour les données, il suffit dans le tableau d’OCTETs nommé AL (Pour ALertes) de ne décrire que chaque OCTET différent de tous les autres. Du coup, le tableau de la Fig.50 qui ne liste que les combinaisons nécessaires se réduit à 14 cellules. Comme gain ce n’est pas fabuleux, mais n’oubliez pas qu’un programmeur optimise à outrance la taille occupée par les données en mémoire dynamique. Sur la Fig.50 dans la zone bleue pastel on trouve les combinaisons pour A1, dans la zone rose s’ajoutent celles qu’il faut en plus pour A2, en zone jaune celles supplémentaires pour A3 et enfin en zone vert pastel celles pour l’affichage de A4. Le tableau de la Fig.51 résume la combinatoire des octets à utiliser pour chacune des « pages » à visualiser. Sachant que les indices dans le tableau AL[14] vont de 0 à 13 la Fig.52 repère dans la procédures quelques instructions.

 

 

 

La suite est ici.