NXT-G, leçon n°9 : Variable... la valise fourre-tout

Pour expliquer certains fonctionnements, principes et fondements.
Avatar de l’utilisateur
roboleo
Level 8
Level 8
 
Messages: 955
Localisation: Hauts de Seine
expertnxt

Messagepar roboleo » Mar Mar 03, 2009 8:12 pm

NXT-G, Leçon n°9: Variable… La valise fourre-tout.

Drôle te titre pour une leçon! Cela signifie-t-il que l'on peut mettre n'importe quoi dans une valise, mais pour faire quoi?
En vérité cette leçon traite un bloc spécial appelé bloc VARIABLE. Vous trouverez ce bloc très utile lorsque vous aurez besoin de ranger une information pour un usage ultérieur.

Le bloc VARIABLE

Imaginons un moment que vous voulez donner à BONG quelques informations à conserver. Ces informations peuvent consister en quelques mots, quelques nombres, et quelques couples de valeurs logiques OUI/NON.
BONG a la faculté de ranger chaque morceau d'information dans un dossier virtuel existant dans sa mémoire.
Imaginons ce pseudo-code:
LEO :cri: > BONG Voulez-vous ranger les mots "roue" et "engrenage" dans votre mémoire?
LEO :cri: > BONG, j'ai aussi besoin que vous rangiez les nombres "120" et "70" dans votre mémoire.
LEO :cri: > BONG voulez-vous ranger un "VRAI" logique et un "FAUX" logique dans votre mémoire?

Maintenant, avant de traduire ce pseudo-code en programme NXT-G, il me faut vous éclairer un peu plus sur la manière dont un programme NXT-G range une information, la modifie, et la retrouve. Tout cela est réalisé par le bloc VARIABLE.

Un bloc VARIABLE ne peut accomplir qu'une des 2 choses suivantes:

* Une information peut-être écrite dans un dossier virtuel qui est rangé en mémoire.
* Une information peut-être lue à partir d'un dossier virtuel rangé en mémoire.

Ces dossiers virtuels sont généralement connus sous le nom de variables.
Une variable NXT-G ne peut recevoir que 3 sortes de données:
Texte, Nombre, et valeur Logique (OUI/NON)
Vous avez déjà vu cela, n'est-pas? Et bien c'est la même chose pour les variables.

Un Texte est facile à comprendre; LEO a demandé à BONG de ranger "roue" et "engrenage"; il aurait été aussi simple de lui dire de ranger la lettre "A" ou la phase "Mon nom est BONG" .
Pour les Nombres, c'est un peu différent: quand un NXT-G bloc VARIABLE est paramétré pour recevoir un nombre, ce ne peut-être qu'un nombre entier, positif ou négatif. Les nombres comme 8,5 ou -16,7 seront arrondis à l'entier le plus proche (8 et -17 ici).
Les valeurs Logiques n'ont que 2 choix: VRAI ou FAUX. Un bloc VARIABLE NXT-G, paramétré pour recevoir une valeur Logique, ne peut contenir seulement que VRAI ou FAUX, et rien d'autre.

Bien, voyons à présent à quoi ressemble le bloc VARIABLE.
Il est situé dans la palette Complète au développé de l'icône "Données". Son icône est très représentative: c'est une valise, et tout le monde sait qu'une valise est un "conteneur", c'est-à-dire une boîte destinée à transporter des objets (dans notre cas des valeurs). Une valise peut aussi être vide ou remplie d'objets. Mais, particularité, ces objets sont toujours de même nature. On peut y trouver des chemises ou des chaussettes, mais jamais des chemises et des chaussettes.

Image

J'ai signalé plus haut qu'une valeur pouvait être écrite dans ou lue dans un bloc VARIABLE.
Ici, par défaut le bloc est configuré pour lire (dans la zone Action, lire est sélectionné) une valeur Logique. Cette variable a aussi un nom: Logique 1.
Cela signifie que si VRAI ou FAUX est rangé dans la variable, cette valeur ne peut-être que lue. Vous remarquerez aussi que la zone Valeur est estompée donc inaccessible. Enfin, toujours dans cette zone estompée la valeur de défaut est FAUX.
Avant de vous montrer comment modifier ces paramètres, sélectionnez la variable Nombre 1.

Image

Vous remarquerez que la valeur de défaut (dans la zone Valeur estompée) est zéro (0). Ce nombre est la valeur qui sera lue dans la Variable "Nombre 1".
Enfin, choisissez la variable Texte 1.

Image

La valeur de défaut (dans la zone Valeur estompée) dans le champ de saisie est vide; il n'y a aucun texte rangé dans cette variable.
Dans les 3 figures ci-dessus, on notera que les blocs VARIABLE ne disposent que d'un seul plot de données, le plot de Sortie; évident, non?
Dans ces 3 cas, les données ne peuvent-être que lues. Et pour les lire j'ai besoin d'un autre bloc disposant lui aussi d'un plot de données, par exemple le bloc AFFICHER. Nous savons que ce bloc dispose d'un plot d'ENTREE "Texte" (T); il suffira donc de tirer un fil de données entre ces 2 blocs.

Image

Le texte figurant dans la zone Texte du bloc AFFICHER (Mindstorms NXT) n'apparaîtra pas sur l'écran, mais sera remplacé par la valeur de la variable (ici néant). Par contre si un texte figurait dans la zone valeur de la variable, c'est alors ce texte qui aurait pris la place, sur la ligne 5, bien évidemment.
J'espère que vous avez compris ce mécanisme, et je vais maintenant l'illustrer d'une autre manière.

Image

Dans cet exemple, j'ai connecté un bloc VARIABLE nommé Logique 1 à un bloc COMMUTATEUR dont le panneau de configuration est visible sur la figure. Ces 2 blocs sont compatibles puisqu'ils n'acceptent que des valeurs logiques.
J'ai relié les plots par un fil de données. La valeur de défaut du bloc VARIABLE est FAUX.
Quand j'exécute le programme, le bloc COMMUTATEUR lira le contenu du bloc VARIABLE. Si la valeur est VRAI, le bloc COMMUTATEUR activera le bloc SON qui se trouve dans la partie haute (VRAI); si la valeur est FAUX, le bloc COMMUTATEUR activera le bloc DEPLACER qui se trouve dans la partie basse (FAUX).

Après avoir traité le bloc VARIABLE en lecture, que se passerait-il si je voulais y introduire des données?
Pour cela je dois écrire des données dans ce bloc, et voici comment s'y prendre.

Image

Après avoir placé un bloc VARIABLE sur le rayon de séquence, j'ai choisi Logique 1 comme valeur.
Dans la zone Action, j'ai sélectionné Ecrire. La zone Valeur devient maintenant accessible, et là j'ai sélectionné VRAI. J'ai donc inversé les valeurs.
Vous avez également remarqué l'apparition d'un plot d'ENTREE. Cela signifie que je peux disposer d'une valeur FAUX ou VRAI par l'intermédiaire d'un fil de données relié à un autre bloc. Dans cet exemple, les données doivent être compatibles, sinon le lien sera rompu et représenté par un fil pointillé.
Dans la figure suivante, vous pouvez voir à quoi ressemblent les panneaux de configuration pour le Nombre 1 et le texte 1.

Image

Pour la variable Nombre 1, les valeurs acceptées dans le champ valeur sont des nombres entiers, positifs ou négatifs.
Pour la variable Texte 1, vous pouvez taper des mots, des phrases ou des paragraphes entiers dans le champ de saisie valeur.

Après avoir modifié les données dans un bloc VARIABLE, vous pouvez, soit conserver la variable en sélectionnant lire dans la zone Action (cela protège les données de toute fausse manoeuvre), soit quitter le bloc en l'état. Si vous choisissez Ecrire dans la zone Action, vous pouvez alors tirer un fil de données entre un autre bloc et le plot d'ENTREE du bloc VARIABLE (veillez à choisir le type de données compatible avec le bloc pourvoyeur de données - logique, nombre ou texte - ).

Revenons maintenant a notre pseudo-code du début:
LEO :cri: > BONG Voulez-vous ranger les mots "roue" et "engrenage" dans votre mémoire?
LEO :cri: > BONG, j'ai aussi besoin que vous rangiez les nombres "120" et "70" dans votre mémoire"
LEO :cri: > BONG voulez-vous ranger un "VRAI" logique et un "FAUX" logique dans votre mémoire?

Voyez-vous le problème?
J'ai 2 zones de texte et 2 valeurs à stocker. Je sais déjà qu'un bloc VARIABLE ne peut ranger qu'une seule donnée. Si je range le nombre 120 par exemple dans la variable Nombre 1, où vais-je ranger la valeur 70? Je peux aussi ranger "roue" dans la variable Texte 1, mais qu'en est-il d' "engrenage"?
La réponse est simple. NXT-G vous permet de créer autant de variables que vous le souhaitez. Vous pouvez même renommer la variable pour la rendre plus explicite; remplacer Texte 1 par "Pièce", ou Nombre 1 par "Quantité".
Voilà comment procéder.

Si vous devez créer une variable suplémentaire, commencez par dérouler dans la barre de menu de la fenêtre du logiciel, le menu EDITION, puis le sous menu DEFINIR les VARIABLES.

Image

La petite fenêtre suivante apparaît:

Image Appuyez sur le bouton Créer.
Image Une 4 ème variable apparaît sur un bandeau orange; il suffit de modifier la valeur de défaut "MaVariable 1" dans le champ Nom, et de sélectionner le type à utiliser.

Image Cliquez sur le bouton Fermer.

Vous venez de créer une nouvelle variable qui vient s'ajouter à celles existantes.

Si vous sélectionnez à présent dans la palette Complète le bloc VARIABLE, voici ce que verrez:

Image

Vous avez créé une variable numérique intitulée Quantité, et son nom apparaît dans l'icône du bloc. C'est une manière d'éviter aussi toute confusion dans leur utilisation et leur lecture dans les programmes.
Remarque: cette nouvelle variable n'existe que dans le programme en cours.

Bien, vous savez maintenant comment écrire et lire des données dans une variable, ainsi qu'en ajouter.

Nous allons aborder la façon de les utiliser dans vos programmes.
Prenons le cas de ce morceau de pseudo-code pour BONG:

LEO :cri: > BONG, attendre 3 secondes avant que j'appuie sur le le bouton rouge (Entrée).
LEO :cri: > BONG, si j'appuie et relâche le bouton, affiche sur ton écran "Enfoncé"
LEO :cri: > Bong, si je n'appuie pas sur le bouton, affiche sur ton écran "Lâché".

Je commencerai par installer ces deux blocs:
Un bloc ATTENDRE réglé sur 3 secondes
Un bloc BOUTONS NXT configuré sur Enfoncé.

Image

Je vais maintenant créer une variable que j'appellerai Enfonce du type Logique (vous savez comment faire…).

J'installe donc à la suite ce bloc VARIABLE, et dans la zone Action, je sélectionne Ecrire. On constate l'apparition du plot d'entrée de données sur la gauche de l'icône. Je tire ensuite un fil de données entre le bloc BOUTONS NXT et le bloc VARIABLE.

Image

Si le bouton ENTREE du NXT est appuyé pendant les 3 premières secondes, le bloc capteur boutons NXT détectera le changement d'état du bouton et intervertira la valeur logique FAUX par VRAI. Une valeur VRAI ou FAUX sera alors écrite dans la variable ENFONCE jusqu'à ce que les 3 secondes soient écoulées.

Au démarrage du programme, la valeur initiale est FAUX, mais elle peut être changée en VRAI si le bouton ENTREE est enfoncé.
Lorsque le bloc ATTENDRE se termine (après 3 secondes), il faut afficher sur l'écran du NXT "Enfoncé" ou "Lâché". Pour accomplir cette tâche, je vais ajouter un autre bloc variable ENFONCE en prenant le soin de sélectionner dans la zone Action, l'option Lire.
Ensuite je vais lui associer un bloc COMMUTATEUR paramétré en valeur-logique, avec une représentation en onglets (case Vue à plat décochée). Pour compléter je tire un fil de données entre cette nouvelle variable et le bloc COMMUTATEUR.
Ce qui donne la figure suivante:

Image

Le bloc COMMUTATEUR réagira selon la valeur résidant dans la variable ENFONCE.
Dans le chemin VRAI du bloc COMMUTATEUR, je place un bloc AFFICHER comportant le mot "ENFONCE", et dans le chemin FAUX, un autre bloc AFFICHER comportant le mot "LACHE" (la case Effacer étant cochée dans les 2 cas).

Image

Enfin et pour terminer le programme, j'installe un bloc ATTENDRE jusqu'à ce que le bouton flèche Gauche du NXT soit enfoncé.
Ce qui donne le résultat final:

Image

Exécutez à présent le programme, à plusieurs reprises en enfonçant le bouton ENTREE, ou ne faîtes rien. Votre choix d'appuyer ou non le bouton, convertira en valeur VRAI ou FAUX ce qui est rangé dans le bloc variable ENFONCE. Après 3 secondes, la dernière valeur ainsi rangée sera lue par le bloc COMMUTATEUR, et le texte approprié affiché sur l'écran.

Quel intérêt avons nous de procéder ainsi? On aurait pu tout simplement relier le bloc BOUTON NXT au bloc COMMUTATEUR…
En effet, si vous n'envisagez pas de changer d'avis.
Mais si vous souhaitez inverser votre décision, vous avez 3 secondes pour le faire; et dans ce cas, c'est possible sans être obligé de modifier votre programme.
La variable ENFONCE a tout simplement conservé en mémoire la dernière valeur logique, valeur qui a été utilisée par la suite. Cette valeur peut être réutilisée à n'importe quelle moment jusqu'à la fin du programme.

Retenez simplement que les variables constituent un moyen puissant de stockage d'informations que votre robot peut utiliser plus tard…
A+
Roboleo
" Je ne cherche pas, je trouve…" P. Picasso

NeuroMimetis
Level 10
Level 10
 
Messages: 1574
collectionneur

Messagepar NeuroMimetis » Mer Mar 04, 2009 12:16 am

Robo,

juste encore un merci pour ces leçons qui explorent bien le potentiel des NXT. Avec la N°9, tu as fait le tour on dirait. La suite c'est à nous de la construire.

Sais-tu (savez-vous) quelles sont les évolutions attendues en matière de programmation et de contrôle sur la version 2009 ?

A+
Neuro

Avatar de l’utilisateur
roboleo
Level 8
Level 8
 
Messages: 955
Localisation: Hauts de Seine
expertnxt

Messagepar roboleo » Mer Mar 04, 2009 12:46 am

NeuroMimetis a écrit:Robo,

juste encore un merci pour ces leçons qui explorent bien le potentiel des NXT. Avec la N°9, tu as fait le tour on dirait. La suite c'est à nous de la construire.

Sais-tu (savez-vous) quelles sont les évolutions attendues en matière de programmation et de contrôle sur la version 2009 ?

A+
Neuro

Très honoré… :resp: La règle est le tutoiement, non? :papylol:
Je n'ai pas encore fini; il reste encore quelques chapitres à développer.
Je réserve une dernière leçon consacrée uniquement à des exemples de toutes sortes, y compris ceux que vous ajouterez.
Pour la version 2009, je ne l'ai pas encore abordée. J'attends que la période des bugs découverts par d'autres soit passée. Je ne crois pas à de gros changements à part quelques facilités d'utilisation. Par contre, on trouve déjà sur le net des blocs particuliers créés par des aficionados qui peuvent compléter les palettes existantes (un bloc suiveur de tracé par exemple).
;)
A+
Roboleo
" Je ne cherche pas, je trouve…" P. Picasso


Retourner vers De la théorie à la pratique

Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité