Outre l’ajout des routines de visualisation du carrousel sous forme graphique ou par la grille de la Fig.59 il faut développer les fonctions relatives au menu BARILLET et introduire les données qui représentent les 56 pions du plateau de la machine virtuelles, et celle des 56 BITs correspondant à l’état initial. C’est le démonstrateur P12_Gestion_du_BARILLET.ino qui gloutonne le plus de place en mémoire de programme, car il devient très « bavard » sur les nouveaux textes affichés et surtout sur les pages d’écran très encombrées comme nous allons le constater. Notons au passage que les copies d’écran Fig.60, Fig.61 et Fig.62 sont issues d’un réel calcul issu de la durée d’un traitement. Seule cette durée est simulée, la routine de détermination et d’affichage du temps réel que prendrait la machine électromécanique sont codés pour le programme futur.
Un menu pour BARILLET modifié et optimisé.
Phénomène d’une banalité qui confine au pléonasme, le développement d’un programme fait forcément émerger des faiblesses et des décisions pénalisantes qui impliquent de restructurer régulièrement des approches qui semblaient taillées dans le marbre. Pour mémoire, l’image ci-dessous reprend la Fig.13 qui montrait les items du menu BARILLET. Comme on peut le constater sur la Fig.63 qui montre la nouvelle architecture de cette page écran, les fonctions qui simulent la rotation à gauche et à droite du plateau ont été supprimées. En effet, avoir à invoquer ce menu chaque fois que l’on désire faire tourner le carrousel s’est rapidement montré totalement inefficace. Dans la conception précédente, on pouvait avec Affiche montrer l’état du BARILLET initial, et avec PLATEAU celui de la machine suite à un traitement RUN. L’expérience montre sans contestation que l’on doit pouvoir passer de l’un à l’autre rapidement. Dans la nouvelle mouture l’item Affiche est donc intégré directement dans l’item PLATEAU symbolisé par la flèche verte, fonction plus complète qui prend la première place dans le menu, ce que suggère la flèche orange. Du coup on ouvre la possibilité de trois options nouvelles, et sur la Fig.63 le texte Init.BIT a été remplacé par Sature à mon sens plus explicite. Nous allons point par point analyser toutes les fonctions actuellement disponibles dans le menu BARILLET.
La fonction PLATEAU.
Première dans la liste des items du menu BARILLET, cette fonction est de loin l’une des plus délicate a avoir été développée, car la représentation du carrousel s’est avérée infiniment plus délicate à créer et à déverminer qu’une évaluation initiale naïve ne le laissait présager. Noter au passage que les informations Pgm073 PAUSE montrées sur la Fig.58 par exemple ne concernent que le mode RUN qui pour le moment n’est toujours pas développé et ne concernent pas le protocole PLATEAU.
Considérons la Fig.64 qui présente le carrousel sous l’aspect FENETRE, c’est à dire avec la symbolique de la Fig.58 donnée en page 19. Sur cet exemple on montre la configuration du PLATEAU, c’est à dire avec les effets qui seraient engendrés par l’activation d’un algorithme. Avec un clic sur le BP3 peut à tout moment visualiser l’état INITIAL suite à l’utilisation de la fonction Arrange. Comme on peut s’en douter, le BP4 fait tourner le plateau à Gauche alors que BP5 le déplace à Droite. Si l’on observe le petit encadré vert clair, la valeur 5 est affichée. En cliquant sur le BP2 on fait alterner cette indication entre 1 et 5. Cette information correspond au nombre de pions qui vont se déplacer sous la tête de L/E quand on fait tourner le carrousel. Il devient alors très facile de le faire tourner « lentement » ou « rapidement » pour visualiser à notre guise la zone du carrousel qui nous intéresse. Autant sur la représentation FENETRE on sait quel est le repère du pion qui se trouve sous la tête de L/E, le n°20 sur la Fig.64, autant le pion qui a été choisi pour Origine arbitraire peut se trouver hors des limites affichées. (C’est le cas dans cet exemple.) Aussi, dans l’encadré jaune, la valeur de l’Origine symbolisée par
est précisée numériquement. Avec BP1 on alterne l’affichage entre la valeur de Tmp µP et celle de Tréel. Sur la Fig.66 l’origine se trouve hors des repères « numériques » de position des pions sur le plateau. Par contre, sur la Fig.67 c’est le BIT n°1 qui se trouve sous la tête de L/E. Quand il y a superposition entre un repère « numérique » (Dont les intermédiaires « 5 » repérés par le trait vertical.) et la valeur de l’Origine, c’est le symbole
qui est prioritaire, le « numérique » étant ignoré. Comme pour les autres menus, cliquer sur le B.P.C. fait sortir de la représentation du PLATEAU pour revenir au Menu de BASE. Toutefois, avant de sortir de ce mode, tourner le bouton du codeur rotatif. Quel que soit le sens de rotation, on alterne la visualisation entre l’option graphique du carrousel et la représentation GRILLE qui sous la forme d’un damier présente la totalité des 56 pions. Cette page écran est gavée d’informations qu’il importe de détailler. On retrouve globalement la présentation donnée en Fig.54 de la page 18 avec de nouvelles informations complémentaires. Que l’on soit en mode FENETRE ou en représentation de type GRILLE montré sur la Fig.68, comme vous pouvez l’observer sur la Fig.69 l’utilisation du petit clavier et du codeur rotatif est strictement la même. Seule petite différence, en option d’affichage de type GRILLE le BP1 est sans effet car l’affichage des durée n’est plus pertinent, et se contente de faire un BIP sonore pour en avertir l’opérateur.
Exemple proposé suite à un RESET, sur la Fig.68 le damier est « vide » car tous les pions sont forcés à l’état « B« . De ce fait, tous les repérages sont visibles avec les symboles numériques pour les positions de 10 en 10 et par les petits carrés centraux coloriés en bleu pour les positions des repères « en 5 ». Quand on clique sur BP3 on alterne en configuration PLATEAU indiqué par le P dans l’encadré rose, ou en affichage INITIAL représenté par à la place du P. En coordonnées cartésiennes, la « croisée » des curseurs « rouges » indique la position de la tête de L/E. Dans l’exemple c’est le pion n°38 qui est sous la tête de L/E. La position de l’Origine est précisée par le curseur situé sur le coté droit de l’encadrement et par celui qui est sur le coté bas de la grille. Dans cet exemple l’Origine arbitraire est placée sur le pion n°1. (Surcharges en jaune.) Le nombre de pas effectués quand on clique sur BP4 ou BP5 est indiqué dans l’encadré vert.
RECHARGEr ou SAUVEgarder une configuration BARILLET.
Lorsque l’on initialise la mémoire non volatile de l’ATmega328 avec l’utilitaire P00_Initialiser_EEPROM.ino on y inscrit une configuration carrousel qui ne contient que des « 0 » et des « 1 » représenté sur la Fig.70 qui se traduit par un visuel très particulier. Quand on SAUVE une configuration on inscrit la valeur des 56 BITs du carrousel initial, ainsi que la valeur de l’Origine et celle de la position de la tête de L/E. En EEPROM l’origine est initialisée à 3 et la tête de L/E à 33. L’inconvénient du tableau de la Fig.70 est que tous les jalons numériques sont cachés, il ne reste que les points centraux des « valeurs en 5 », d’où un repérage plus délicat. L’utilisation de l’item RECHARGE commence par afficher CHARGER OUI vers le centre de l’écran. Si l’on fait tourner le codeur rotatif, la valeur OUI alterne avec NON. On termine l’action positive ou négative en cliquant sur le bouton central du codeur rotatif et si OUI est validé le rechargement se fait inconditionnellement quelle que soient les données en EEPROM. Si le transfert est validé, la GRILLE de la Fig.70 est affichée et l’on peut vérifier la configuration des pions, la position de la tête de L/E ainsi que le pion choisi pour l’Origine. La LED triple clignote en vert signalant à l’opérateur qu’il doit cliquer sur le petit clavier pour revenir au MENU de BASE. De façon tout à fait analogue, cliquer sur SAUVE fait afficher
que l’on modifie avec le codeur rotatif et que l’on valide avec le B.P.C. Quel que soit l’état OUI ou NON il y a retour au MENU de BASE sans autre information.
La fonction Arrange.
L’activation de cette fonction d’initialisation manuelle du BARILLET ouvre un écran qui ressemble étrangement à celui de la Fig.70 avec toutefois un petit carré en bas à gauche qui contiendra la valeur 1 ou la valeur 5. On se doute que cette information est relative au nombre de pas qui seront effectués quand on va se déplacer dans la grille. Diverses expérimentations ont été testées, car il fallait aboutir à une procédure agréable. Initialement, le codeur rotatif faisait alterner l’inscription d’un « B« , d’un « 0 » et d’un « 1 » dans la cellule concernée, et les déplacements étaient gérés au clavier. Au final, c’est un protocole inverse qui a été implémenté car il s’est avéré bien plus convivial lors des essais. Dans la version actuelle du démonstrateur, le codeur rotatif comme l’indique la Fig.72 déplace les curseurs qui indiquent en coordonnées cartésiennes la cellule en cours de saisie. Dans notre exemple les curseurs sont encadrés en jaune et pointent le pion n°46. Pour rappel qu’il s’agit du carrousel INITIAL, le petit carré repéré en rose affiche le symbole de l’Origine par opposition au P du PLATEAU. La répartition des touches est verticale pour l’inscription d’un « B« , d’un « 0 » et d’un « 1 » et le pas est égal à 1 pour le BP de gauche et de 5 pour celui de droite.
La fonction Origine.
Poursuivons dans l’ordre l’exploration des items du menu BARILLET. On trouve la possibilité de choisir la valeur arbitraire du pion défini comme Origine. Le centre de l’écran affiche le texte
qui à l’ouverture propose la valeur 1. En tournant le codeur rotatif on incrémente ou on décrémente la valeur avec une borne inférieure égale à 0 qui alterne avec 1. Dans le sens positif, 56 fait recycler à 1. Comme l’Origine peut être choisie n’importe où sur le BARILLET, on doit pouvoir se déplacer rapidement. C’est le clavier qui octroie la faculté de choisir des pas unitaires de 1, 5 ou de 10 ce que précise la Fig.73 avec BP2 et BP3 qui ne sont pas utilisés et qui engendrent un BIP d’avertissement sonore. La sortie de la saisie se fait avec le B.P.C.
La fonction Pos.TÊTE du menu BARILLET.
C’est le complément direct de la fonction précédente qui ouvre la saisie avec le texte . Comme pour le choix de la valeur de l’Origine, la valeur initiale est forcée à 1. Le comportement du clavier et du codeur rotatif sont strictement identiques aux informations de la Fig.73 puis-qu’ici aussi il s’agit de mentionner l’un des pions quelconques du BARILLET. De la même façon, cliquer sur le B.P.C. ramène au MENU de BASE.
La fonction RAZ du menu BARILLET.
Sigle qui signifie habituellement Remise À Zéro, dans notre cas l’implication est un peu différente. Si l’on valide cette option en cliquant sur le B.P.C, il y aura retour au MENU de BASE et tous les pions seront forcés à l’état « B« . (État « B » et non « 0« .) Le petit clavier est ignoré. En tournant le codeur rotatif on alterne entre OUI et NON. Valider avec NON ramène directement au MENU de BASE alors que OUI fait afficher la GRILLE pour visualiser l’état du BARILLET. La LED triple clignote en vert pour inciter l’opérateur à cliquer sur l’une des touches du petit clavier.
La fonction Sature du menu BARILLET.
Analogue à la fonction précédente, cette option est prévue pour remplir entièrement le barillet avec des « B« , des « 0 » ou des « 1 » à l’initiative de l’utilisateur. Le comportement est assez analogue à celui de RAZ. Le petit clavier est toujours ignoré. Le codeur rotatif fait alterner les valeurs potentielles « B« , « 0« , « 1 » avec des affichages tel que qui permet de revenir au MENU de BASE sans rien changer. Comme pour RAZ la sortie de cette fonction se fait avec le B.P.C. et affichage de la GRILLE si la validation est effective.
La fonction Run->PLT du menu BARILLET.
Possibilité qui ne sera pas forcément la plus utilisée, cette procédure offre au programmeur la faculté de recopier le contenu du PLATEAU dans INITIAL. Pour mémoire, la valeur mémorisée dans INITIAL est purement virtuelle est n’existe pas sur la machine matérielle. Dans le cas de la machine virtuelle, contrairement au prototype électromécanique, on ne peut pas réactiver un RUN sur un carrousel qui contiendrait le résultat d’un traitement déjà engagé sur la machine. C’est dans ce cas qu’il devient bien commode de recopier intégralement la configuration de PLATEAU dans INITIAL, y compris la valeur de la position de la Tête de L/E. L’ouverture de cette fonction se fait sur le texte . Le petit clavier est ignoré à ce stade et c’est le codeur rotatif qui fait alterner OUI et NON. Comme pour les fonctions précédentes, la sortie avec NON ramène directement au MENU de BASE alors que OUI fait afficher la GRILLE et la LED verte clignote. Pour que cette grille puisse afficher un état du plateau « issu d’un algorithme », en cliquant sur RUN on génère un plateau particulier d’un « visuel facile » dont la Fig.74 présente l’aspect. Noter que RUN génère un BIP sonore pour signaler qu’il a bien été pris en compte.
La fonction CHARGER le Motif du menu BARILLET.
Dernier item à ne pas avoir été détaillé, c’est bien parce qu’un trou était présent dans la liste que ce petit « outil » a été ajouté au menu. Quand on valide alors que l’affichage de la page écran indique le carrousel va être entièrement rempli par une succession de série « B 0 1« . Copiant les protocoles des fonctions précédentes, la GRILLE est affichée et présente l’aspect caractéristique de la Fig.75 avec toutes les cellules initialisées, mais qui laissent voir trois repères numériques. Cette configuration est très utile pour observer les affichages de INITIAL quand on fait tourner le barillet, effet visuel formateur, que l’on soit en mode FENETRE ou en visuel de GRILLE. C’est du reste avec cette configuration que la Fig.67 a été générée. L’affichage de la configuration du carrousel fait clignoter la LED triple en vert, incitant l’utilisateur à cliquer sur l’une des touches du clavier pour revenir au MENU de BASE. Noter que cette initialisation automatique de la position des 56 pions n’affecte que ces derniers et ne modifie ni la position de la Tête de L/E ni celle de l’Origine.
Un bilan de consommation des ressources.
À n’en pas douter, l’implantation de toutes les fonctions du menu BARILLET a gloutonné un espace mémoire de programme très important. Avant de créer tout l’arsenal de gestion et d’affichage du carrousel, le programme consommait 34% de la zone réservée au logiciel. (Compilateur 1.8.0) Sur le « thermomètre » de la Fig.76 cette dépense initiale est coloriée en bleu clair. Le prix à payer pour ajouter les affichages et les fonctions du BARILLET est de 35% colorié en rouge dans le capillaire fictif. La consommation totale est de 69%. Il ne nous reste plus que la zone verte, soit moins du tiers de la zone programme, pour faire fonctionner réellement cette machine fictive, et la pourvoir du menu des OPTIONS. Et bien, contrairement à ce que vous risquez de penser, cette zone verte me semble tout à fait suffisante. En effet, les routines graphiques sont boulimiques en ressources. Elles sont presque toutes émulées. Quand au RUN proprement dit, à mon sens il consommera moins de 10%, car déjà le calcul des durée est effectif, faire tourner le PLATEAU est en place etc. Tout m’incite à croire qu’il y aura encore assez d’espace pour les OPTIONS. L’optimisation à outrance du code semble
porter ses fruits et va continuer d’importance. On persévère et on signe …
La suite est ici.