De nombreuses questions posées par les utilisateurs de NXT-G concernent les Plots de Données, et cela avec raison. Les plots de données d'un Bloc peuvent semer la confusion, surtout quand le bloc présente plusieurs options. D'où certaines difficultés pour "tirer" les bons fils et pour assurer des connexions correctes.
Nous allons faire une pose dans l'étude de la programmation des blocs NXT-G, et j'essaierai de vous donner quelques astuces pour mieux utiliser ces spécificités que constituent les Plots et les Fils de données.
Transmettre des informations:
Voici pour commencer un bloc de programmation factice que j'appelle Bloc de FORME.

Ce bloc imaginaire est le plus simple que vous puissiez rencontrer. Il ne contient qu'UNE seule forme: un CUBE. Un cube et rien d'autre, et il n'existe aucun moyen pour changer cette forme.
Mais il y a encore pire, ce bloc ne dispose d'aucun dispositif pour partager cette forme avec un robot. C'est un bloc vraiment stupide, ennuyeux et inutile.
Que pourrait-on faire pour qu'il puisse nous rendre service?
Bien, d'abord le rendre capable de changer de FORME. Celle que je préfère, c'est la SPHERE. Aussi j'aimerai bien qu'il puisse remplacer le CUBE par la SPHERE.
Pour l'instant, je ne souhaite rien faire d'autre que ce changement; ce bloc contiendrait alors ma forme préférée!
La chose qui manque à ce bloc, c'est le moyen de se glisser à l'intérieur et de changer le CUBE en SPHERE. Ce serait bien si je pouvais le faire moi-même, et procéder à ces changements selon mes désirs.
La première chose à faire, c'est de connecter à ce bloc un minuscule clavier pour changer la FORME. Ce clavier très particulier comporterait des touches conçues pour choisir seulement une forme (cube, parallélépipède, sphère, cône, cylindre, anneau, tige, etc…), et rien d'autre. Il n'est pas fabriqué pour taper du texte ou autre chose.
On pourrait l'imaginer ainsi:

Parfait! Maintenant je peux saisir SPHERE. Plus tard, si j'envisageais de remplacer SPHERE par TIGE, je n'aurais qu'à appuyer sur la touche représentative de cette autre forme.
A présent, j'ai la forme SPHERE . En dehors de la visualiser, je ne peux pas en faire grand chose. Tout comme le clavier de forme, je vais raccorder au bloc un petit écran factice capable de puiser l'information et de l'afficher. Cet écran est semblable au clavier; il ne peut afficher que des formes et rien d'autre.
Notre dispositif pourrait ressembler à ceci:

Résumons:
* Le bloc ne peut contenir qu'une seule forme, pas de nombre, ni de jour ni de nom.
* Ensuite, au bloc FORME est raccordé un clavier qui permet de changer seulement et uniquement la forme contenue dans ce bloc.
* Enfin, un écran spécial raccordé au bloc, ne peut afficher que la forme, et rien d'autre; ni un nom, ni des légumes ou ingrédients…!
Et maintenant, quelques questions:
* Si je débranche le clavier, puis-je afficher la forme conservée dans le bloc? Oui, mais à condition que l'écran soit raccordé.
* Si je débranche l'écran, puis-je toujours changer la forme à l'intérieur du bloc? Oui à nouveau, mais à condition que le clavier reste raccordé.
On pourrait aussi définir le bloc de cette façon:
* Le bloc FORME reçoit une Forme comme une ENTREE à partir du clavier.
* Le bloc FORME donne une Forme comme une SORTIE sur l'écran.
Il y a dans cette description 2 termes que vous devez mémoriser: Entrée et Sortie (input & output en anglais).
Chaque fois que vous penserez bloc, rappelez vous toujours qu'une information reçue dans un bloc est une Entrée, et qu'une information donnée (ou partagée) est une Sortie.
Nous allons maintenant travailler sur un bloc offrant quelques options supplémentaires.
Voici un nouveau bloc factice que j'appelle TIROIR. Il est destiné à recevoir des pièces LEGO.

Ce bloc peut contenir 3 sortes d'informations: une forme (type de pièce), le nombre de pièces dans le tiroir,et une réponse OUI si le tiroir est vide ou NON si le tiroir n'est pas vide.
Au lieu de m'encombrer de clavier et d'écran pour les entrées et sorties, j'ai imaginé une représentation plus simple à l'aide d'un "socle" un "HUB" comme disent les anglais.

Vous pouvez voir sur le croquis qu'il y a 3 plots d'entrée à gauche du Hub, et 3 plots de sortie à droite. C'est sur ces plots que se raccorderont le clavier, l'écran et autres dispositifs.
Tout comme le bloc FORME, le bloc TIROIR est très pointilleux quant aux dispositifs qui lui sont raccordés. Pour le plot d'entrée PIECE, je ne peux raccorder que des formes. Nous savons déjà qu'un clavier de forme fonctionne. Je peux donc lui raccorder ce clavier et changer grâce à lui les pièces (formes), remplacer SPHERE par TENON par exemple. Mais il y a mieux!
Rappelez-vous, le bloc FORME dont on a parlé précédemment. Bien, il a lui aussi un Hub de données, mais il était caché, escamoté. Nous allons le déployer pour le rendre visible, et pour cela, nous cliquerons au bas de l'angle gauche du bloc FORME (rappelez-vous, leçon n°2).

Le plot d'entrée à gauche du bloc FORME est la borne de raccordement du clavier qui me permet de changer la forme contenue dans le bloc. Le plot de sortie à droite peut être raccordé à un écran, mais en vérité, il peut-être raccordé à n'importe quel plot d'entrée qui accepte une forme!
Aussi, au lieu de raccorder un clavier au plot d'entrée du bloc TIROIR, j'utilise (je tire) un simple fil reliant le plot de sortie FORME du bloc FORME au plot d'entrée PIECE du bloc TIROIR.
Ouf…! J'espère que vous avez suivi.
Et voilà le résultat:

Je peux aussi raccorder un clavier au bloc TIROIR pour saisir un Nombre (une quantité de pièces). Et si j'emploie ce clavier pour autre chose que taper des valeurs, il refusera systématiquement la saisie.
Je peux aussi raccorder un clavier "logique" à l'entrée Vide.
Un clavier "logique" est un peu spécial: il ne peut fournir qu'UNE des 2 réponses, OUI ou NON. Pas peut-être, ni quelques fois…
Ce que j'aimerais faire avec ce bloc TIROIR, c'est de le raccorder à un écran qui affiche une des deux choses (mais pas les deux):
* Remplir le Tiroir d'un type de pièce en précisant le nombre de pièces,
* Le tiroir n'est pas vide.
Pour réaliser cela, j'utiliserai un écran qui affichera le type de pièce et les quantités qui remplissent le tiroir. Mon dispositif ressemblerait à cela:

Mais, avant d'afficher le type de pièce et la quantité, j'ai besoin d'un bloc spécial, capable d'apprécier le contenu du tiroir et de signaler s'il est vide ou non. Il ne me reste plus qu'à vous révéler ce nouveau bloc que j'ai baptisé INSPECTEUR.
Le bloc INSPECTEUR est très astucieux. Il récupère une réponse OUI ou NON (logique), et selon cette réponse déclenche 2 actions différentes. L'action 1 est prise en compte si la réponse est OUI; l'action 2 si cette réponse est NON (nous verrons cela plus en détail à l'occasion d'une autre leçon).
Je peux utiliser ce bloc pour évaluer le contenu du bloc TIROIR.
J'examinerai d'abord les plots de la rubrique Vide. Si le contenu, les informations ou tout simplement les données (data en anglais) fournies sont OUI, Le bloc INSPECTEUR confirmera un OUI sur l'écran. Si les données sont NON, l'INSPECTEUR confirmera un NON sur l'écran.
La figure ci-après illustre bien la situation quand le programme est exécuté:
L'écran affiche "Remplir Tiroir avec 7 Tenons", parce que l'inspecteur a récupéré en entrée un OUI provenant de la rubrique VIDE. Il donne l'ordre de remplir un tiroir qui est vide.

Je souhaite maintenant, changer la pièce par ROUE, et le nombre par 4. Mais aussi changer la réponse logique par NON.
L'inspecteur ayant récupéré le NON en entrée interdira le remplissage en faisant afficher "Tiroir non vide". Quelle que soit la pièce et la quantité le remplissage du tiroir n'aura pas lieu.
Pour qu'il puisse se faire, il faudra attendre qu'un OUI l'autorise, et dans ce cas, l'écran affichera: "Remplir Tiroir avec 4 Roues".
Je pourrais créer des dizaines de blocs factices, mais j'espère que vous commencez à comprendre comment les blocs peuvent recevoir en entrée et donner en sortie des informations. Ces 2 types de données peuvent-être déterminées par vous ( soit en tapant les informations, soit en les choisissant dans le panneau de configuration des blocs), ou fournies par d'autres blocs en utilisant les fils de données.
Vous devez savoir aussi, que certains blocs ne disposent pas de plots d'entrée, d'autres pas de plots de sortie, rares enfin quelques uns sans aucun plot.
Revenons à la programmation et soyez heureux d'apprendre que parmi toutes ces sortes de données imaginables, seuls trois types sont utilisés par le NXT-G:
* Texte: lettres, mots, phrases et même les nombres quand ils sont considérés comme du texte.
* Nombre: les nombres peuvent-être positifs ou négatifs, et quelquefois limités aux valeurs entières (seulement des nombres comme -3, 0, 4, 8 ou 10 et non pas des nombres décimaux comme 4,3 ou 8,5).
* Logique: ne peut-être que OUI ou NON ( une autre manière de l'exprimer étant VRAI ou FAUX).
Quand vous programmerez vous appliquerez cette règle:
Cinquième règle: les seules données qui peuvent circuler entre les blocs sont du TEXTE, des NOMBRES et du type LOGIQUE - et seulement ces trois.
A suivre…
A+
Roboleo