16) Les matrices graphiques : Images / Textes.

Figés en EEPROM, les éléments affichés en plan ou en volume sur le cube de LEDs sont élaborés en vue de minimiser leur encombrement dans la mémoire non volatile de l’ATmega328. Pour diviser par deux la place mémoire occupée, les modèles compris entre 4 et 40 compris sont construit par symétrie horizontale, seule la moitié du dessin étant logée en EEPROM.

Toutefois, certaines redondances résultent de l’historique du développement du programme. Par exemple le texte ALICE ainsi que les chiffres du compte à rebours semblent « en doublons ». Ils ont été conservés pour ne pas avoir à reprendre entièrement les séquences de programme qui les gèrent. Par ailleurs, inclus dans des matrices de 7 x 6 et 8 x 8 ils sont géométriquement mieux adaptés à ces deux items. Que ce soit les dessins « symétriques » ou les « images complètes », leur répartition dans l’EEPROM est organisée pour éviter d’avoir en voisinage des dessins de nature proche. On peut
ainsi faire afficher successivement toute une catégorie de matrices tout en évitant un effet de « lassitude ». Par exemple un cercle tel que 2 est suivi d’un ‘X’ tel que 3, puis d’un carré en 4 etc.

Toujours pour des raisons d’optimisation, les sept images constituant l’oiseau qui vole utilisent également la particularité « miroir » des dessins, mais cette fois la symétrie est verticale. Noter également que pour simplifier la routine d’affichage de texte, ZERO et ‘O’ sont codés deux fois dans la police de caractères bien que strictement identiques géométriquement.

NOTE : Que ce soit pour les matrices de textes ou celles des petits dessins spécifiques, des « zones voisines » sont repérées par tranches colorées en vert ou en bleu. Les zones peuvent concerner un caractère comme présenté sur la fiche Les matrices graphiques : Images / Textes, ou les dessins proposés ci-dessus. Cet artifice de coloration facilite grandement le repérage visuel des octets représentatifs et leur codage en binaire dans Ecrire_les_Empreintes_en_EEPROM.ino.

Étude du décalage à gauche du tableau Empreinte[64].

Mentionnées dans la fiche Implantation logicielle des données à afficher, l’organisation en mémoire RAM des textes est reproduite en plus grand sur la Fig.52, les sept premiers octets du tableau byte Empreinte [109] ne sont pas représentés. Notez que chaque matrice de caractère est composée de cinq Octets. L’espace entre caractère n’est pas codé en EEPROM pour gagner de la place et minimiser l’occupation de la police. Faire défiler un texte sur un plan frontal du cube consiste à afficher les huit premiers octets du tableau, éteindre le cube, décaler le tableau byte Empreinte [109] d’un Octet « à gauche » et de recommencer la séquence d’affichage d’un plan.

Avant de passer à l’étude des rotations planes, une petite parenthèse est souhaitable. Il n’est pas impensable, que certaines ou certains d’entre vous, un peu nostalgiques de la « télégraphie sans fil » puissent désirer intégrer des séquences personnalisées. Le codage des caractères Morse n’est pas très délicat, il suffit d’analyser le code source spécifique, et éventuellement d’aller sur Internet pour avoir la combinatoire des points et des traits. Ayant été radioamateur, je connais parfaitement le code Morse, l’ayant pratiqué durant des années. Aussi, pour vous éviter des recherches sur la toile, le petit utilitaire CODE_MORSE_COMPLET.ino contient la presque totalité de l’alphabet. Par de simples Copier / Coller il sera aisé d’aller chercher les lettres et les chiffres dont vous avez besoin. Enfin, dans la liste des « Sketchs » disponible figure Provisoire.ino qui n’intègre que les définitions et les séquences les plus importantes. Dépouillé de toutes les procédures « artistique », cet outil facilite la mise au point d’un thème particulier en évitant de ce perdre sur un listage de six cent lignes, en réduisant le temps nécessaire pour téléverser ce code objet. Ce n’est qu’un petit module de servitude mis à votre disposition. En particulier, figure en tête de la séquence des initialisations la remarque //Serial.begin(115200); //Serial.println();Serial.print(« —-« ); prévue pour puiser rapidement des instructions servant à visualiser sur la ligne USB du Moniteur les valeurs de divers paramètres pertinents facilitant la mise au point.
Abordons maintenant le dernier volet ce cette saga informatique qui donne le tournis !

La suite est ici.