Les variables et les constantes

Introduction



Dans cette partie du tutoriel consacrée au NXT-G, nous allons aborder le sujet très important que sont les variables et les constantes.

Ces grâce à ces variables notamment que vos programmes pourront être encore plus complexes et intelligents.

Vous allez apprendre ici à donner de la mémoire à votre robot ou à votre machine.

En clair, vos programmes pourront retenir des nombres !

Alors, pour ne pas perdre la tête la mémoire, lisez ce qui suit ... :)

Les variables



Nous allons commencer par voir ce qu'est une variable.

Mais avant cela, j'ai une question à vous poser :

Avez vous de la mémoire ?

Quelle question, bien sûr que j'ai de la mémoire !

J'en suis heureux pour vous et sachez que votre NXT possède lui aussi de la mémoire.

Cette mémoire lui sert à mémoriser un tas de chose, comme les programmes que vous lui envoyés par exemple.

Mais elle peut lui servir aussi à mémoriser autres choses que des programmes.

Elle peut également lui permettre de mémoriser des informations.

Normalement, on ne s'occupe pas trop de la mémoire du NXT. C'est lui même qu'il l'a gère tous seul comme un grand.

C'est vrai quoi, on ne va pas rentrer dans sa tête à ce garçon !

Toutefois, il peut être utile parfois de lui demander de mémoriser une information de manière à la réutiliser plus tard.

Et dans un programme NXT-G, c'est justement le rôle d'une variable que de mémoriser une information lorsque cela est nécessaire.

Expliquons donc un peu ce fameux termes de variable.

C'est vrai quoi, pourquoi un terme si bizarre que "variable" alors que "mémoire" aurait été très bien ?


Qu'est-ce qu'une variable




Imaginez-vous une variable comme un tiroir.

Le tiroir c'est votre variable.

Un jour vous ouvrez votre tiroir pour y mettre une paire de ciseaux pour pouvoir la récupérer plus tard.

Un autre jour vous ouvrez votre tiroir pour y placer un couteau et pouvoir le reprendre ensuite.

Le contenu de votre tiroir peut varier, ce n'est pas toujours le même. Un coup une paire de ciseaux et ensuite un couteau.

Et bien une variable c'est la même chose.

Une variable est une case de la mémoire du NXT, comme un petit tiroir, dans laquelle on y met une information comme un nombre par exemple.

Un coup cette variable peut contenir un nombre comme 56 par exemple et un autre coup elle pourrait très bien contenir un autre nombre comme 14,3 par exemple.

C'est justement parce que son contenu peut varier qu'elle est appelée variable.

Cette variable sert donc à mémoriser une information, comme un nombre, pour pouvoir retrouver cette même information un peu plus tard dans votre programme pour être utilisée par celui-ci.

Et chez vous, si vous avez plusieurs tiroirs de rangement contenant chacun des objets différents, vous mettez une étiquette sur chacun d'eux pour vous repérer facilement lorsque vous voudrez retrouver vos objets rapidement.

Il y aurait, par exemple, un tiroir étiqueté Couteaux, un autre Ciseaux, etc ...

Et bien on fait la même chose avec les variables, on donne un nom à chacune d'entre-elles pour reconnaître facilement quelles informations elles mémorise.

Vous pourriez très bien avoir dans vos programmes des variables nommées par exemple Capteur d'ultrasons, pour mémoriser dedans la distance mesurée par ce capteur, ou Luminosité pour mémoriser l'intensité de lumière mesuré par le capteur de lumière.

Comme vous l'aurez compris, une variable est composée d'un nom et d'une valeur :



Notez que la valeur n'est pas forcément un nombre, mais peut très bien être une valeur logique "Vrai/Faux" ou encore un texte.

Simple, n'est ce pas.

Mais pour pouvoir utiliser un peu de la mémoire du NXT, il va falloir le demander gentiment en lui déclarant que nous souhaitons avoir pour notre programme une variable d'un certain type et ayant un certain nom.

C'est le but de la déclaration de variable que nous allons aborder maintenant.


La déclaration de variable




Cette déclaration de variable est très importante et doit être faite avant toutes utilisations des variables.

Si vous ne faites pas de déclaration de variable, vous ne pourrez tous simplement pas utiliser cette variable dans votre programme.

Pour déclarer une variable, il faut utiliser l'option "Définir les variables" du menu Modifier de votre logiciel NXT-G.



Ceci ouvrira une boîte de dialogue vous permettant de créer, modifier ou supprimer vos variables.



Vous pouvez voir dans la liste des variables que certaines d'entre-elles existent déjà !

Elle sont au nombre de trois et sont chacune une variable par défaut pour chaque type de données.

Vous pouvez donc les utiliser, mais n'y êtes pas obligé.

Pour créer une nouvelle variable, il faut d'abord et avant tout cliquer sur le bouton "Créer".



Vous pouvez voir dans la liste votre nouvelle variable ainsi créée.

Il ne vous reste plus qu'à lui donner un nom et le type de données quelle va devoir contenir à l'aide des deux champs éponyme de cette fenêtre.

Dans cet exemple, nous créons une variable nommée "Ma variable" qui est de type "Numérique".



Vous pouvez ainsi créer autant de nouvelles variables que nécessaire dans votre programme.

Notez que vous pouvez changer le nom d'une variable à tous moment, après sélection de celle-ci dans la liste des variables, et même la supprimer à l'aide du bouton "Supprimer".

Sauf pour les trois variables par défaut qui ne peuvent être ni modifiée, ni supprimée.

Une fois vos variables déclarées, un dernier clic sur le bouton "Fermer" finalisera cette déclaration de variable.

Maintenant nous pouvons utiliser la variable que nous venons de déclarer.


Utilisation des variables




Pour utiliser une variable, il existe dans la palette données du logiciel NXT-G un bloc "Variable".

Voici à quoi il ressemble :




Vous pourrez distinguer dans son panneau de configuration la ou les variables que vous venez de déclarer.

Sélectionnez ainsi la variable que vous voulez utiliser dans la liste affichée sur la droite, comme sur l'image ci-dessus avec la variable nommée "Ma variable".

Notez enfin les deux boutons côté gauche du panneau de configuration qui vous permettent de configurer votre bloc "Variable" pour "Lire" la valeur contenue dans celle-ci ou pour "Ecrire" une valeur dans cette même variable.

Lorsque vous choisissez l'option "Ecrire", le bloc "Variable" mémorise la valeur que vous entrez dans le champ nommé "Valeur" juste en dessous.

Si un fil de données est connecté au bloc "Variable", la valeur transporté par ce fil de données est mémorisé dans la variable.

Et si une précédente valeur été déjà présente dans la variable, cette ancienne valeur se retrouve effacée et remplacée par la nouvelle valeur.

Lorsque vous choisissez l'option "Lire", le bloc "Variable" vous restitue la valeur de cette variable par l'intermédiaire d'un fil de données que vous pouvez utiliser dans votre programme.

Notez que lors de la lecture de cette variable, la valeur de celle-ci reste inchangée et vous retrouverez la même valeur si vous utilisez à nouveau un autres bloc "Variable" pour lire sa valeur.

Voyons maintenant l'utilisation pratique d'une variable.


Premier programme d'exemple




Comme premier programme d'exemple, je vous propose de voir le concept d'utilisation d'une variable.

Pour cela je vous invite à connecter votre capteur d'ultrasons sur le port 4 de votre NXT.

Commencez donc par déclarer une variable numérique que vous nommerez "Distance".



Cette variable contiendra ainsi l'information de distance mesurée par votre capteur d'ultrason.

Ensuite, réalisez le programme suivant :










Ce programme tous simple fonctionne de la manière suivante.

Le bloc "Ultrasons" effectue une mesure de distance à l'aide du capteur d'ultrasons.

La valeur de cette mesure est ensuite mémorisée dans la variable "Distance".

Un bloc "Attendre" permet de faire une première pause de 5 secondes pour qu'ensuite la valeur de cette même variable soit lu et affichée sur l'écran du NXT par l'intermédiaire des blocs "Nombre en texte" et "Afficher".

Enfin, une dernière pause de 10 secondes vous permet de lire l'écran du NXT avant que le programme ne prenne fin.

Rien de sorcier jusque là me direz-vous ...

Nous aurions très bien pu relier directement le bloc "Ultrasons" au bloc "Nombre en texte".

Mais ce programme permet de mettre en avant le concept d'utilisation d'une variable.

Ici, une valeur est mémoriser dans une variable pour être réutilisée plus loin dans le programme.

Nous avons donc vu comment écrire une valeur dans une variable et comment lire cette même valeur par la suite.

Mais quelques-fois vous aurez besoin de modifier la valeur de cette variable après avoir effectuer un calcul quelconque.

C'est l'objectif de démonstration du second programme d'exemple ci-dessous.


Second programme d'exemple




Dans ce second programme, le but est de compter le nombre de fois que vous allez appuyer sur le bouton orange de votre NXT.

Ici, nous n'aurons pas besoin de déclarer une nouvelle variable car nous utiliserons une des variables par défaut et que celle-ci est donc déjà déclarée.

Nous nous contenterons d'utiliser la variable de type numérique nommée Nombre 1.

Cette variable contiendra ainsi le nombre de fois que nous avons déjà appuyé sur le bouton orange du NXT.

Réalisez donc le programme suivant :











Voyons maintenant le fonctionnement de ce programme.

Concernant la variable Nombre 1, le programme comporte deux partie distincte que sont d'une part ce que l'on appelle l'initialisation de la variable et d'autre part la modification de la variable.


L'initialisation d'une variable




Lorsque vous programmez avec des variables, il est très important d'initialiser celles-ci en leurs donnant une valeur initiale.

C'est la seule façon d'être sûr que votre programme s'exécutera toujours de la même manière.

Sinon, le fonctionnement du programme sera indéterminé !

Ici nous initialiserons la variable Nombre 1 en lui donnant dès le début du programme une valeur de 0.



Vous pourriez penser que vu qu'elle doit être à zéro, il n'y a donc pas besoin de le faire puisqu'elle le sera automatiquement.

Ce serait commettre une erreur des plus classiques.

En effet, au démarrage de votre programme, vous ne pouvez pas être sûr de la valeur initiale d'une variable.

Celle-ci peut contenir n'importe quel valeur autre que zéro. C'est pour cela que même s'il vous faut une variable d'une valeur égale à zéro, vous devez l'initialiser pour être sûr de sa valeur.

La meilleur manière de faire les initialisations de vos variables est de le faire au tout début de votre programme, spécialement dans des grands programmes.


Modification d'une variable




Le programme débute, après l'initialisation de la variable, par une boucle sans fin comme d'habitude.

A l'intérieur de cette dernière, le programme va attendre que l'utilisateur appui sur le bouton orange du NXT à l'aide du bloc "Attendre".

Une fois l'appui détecté, la valeur de la variable Nombre 1 est lu grâce au premier bloc "Variable".

Et, initialement, cette valeur est égale à 0.

Cette valeur est alors transmise par un fil de données à un bloc "Math" chargé d'incrémenter cette valeur, c'est à dire de lui additionner la valeur de 1.

Le résultat de ce calcul est envoyé, par l'intermédiaire d'un fil de données, à deux endroit différent.

D'une part, ce résultat est renvoyé dans la variable Nombre 1 à l'aide du second bloc "Variable".

Ce qui fait que l'ancienne valeur présente dans la variable Nombre 1, la valeur initiale de 0, est supprimée et remplacée par la nouvelle valeur issue du résultat du calcul précédent.

En fait, nous venons de faire l'opération suivante : variable~Nombre~1~=~variable~Nombre~1~+~1

Il y a donc eu modification de la valeur de la variable Nombre 1.

D'autre part, ce même résultat est envoyé à un bloc "Nombre en texte" qui, avec l'aide du bloc "Afficher", va fournir le résultat de ce comptage sur l'écran du NXT.

Le programme bouclant sur lui-même, le programme se retrouvera au bloc "Attendre" à patienter jusqu'à un nouvel appui sur le bouton orange du NXT et l'opération se répétera à nouveau.

Toutefois, cette fois-ci, la variable Nombre 1 contient maintenant la valeur 1.

L'opération suivante : variable~Nombre~1~=~variable~Nombre~1~+~1 donnera donc 1 + 1 = 2.

Donc, après se second appui sur le bouton orange du NXT, l'afficheur indiquera bien la valeur 2.

Et ainsi de suite ...

Vous voyez donc bien que dès que vous envoyez une valeur dans une variable à l'aide d'un fil de données, l'ancienne valeur de celle-ci est remplacée par la nouvelle valeur.

Voila donc pour les variables.

Intéressons nous maintenant aux constantes.

Les constantes



Nous allons voir dans cette partie quelque chose qui ressemble de près à une variable, mais qui n'en est pas une.

En effet, une constante est une case en mémoire du NXT qui va retenir une information comme une valeur par exemple.

Mais qu'elle est donc la différence avec une variable.


Qu'est ce qu'une constante ?




Comme son nom l'indique, une constante est une valeur qui ne peut pas changer tant que le programme fonctionne.

Elle reste constante.

Je suis sûr que vous connaissez déjà quelques constantes !

Mais si, réfléchissez bien ...

Un exemple de constante très connue est le nombre pi d'une valeur de 3,14 qui se trouve sur toute calculatrice qui se respecte et que nous avons utilisé dans le tutoriel suivant pour calculer la circonférence des roues de notre robot.

Et d'ailleurs, la circonférence des roues de votre robot est une autre constante elle aussi vu qu'elle ne varie pas dans le temps ... Si vous ne changez pas de taille de roues bien évidemment.

Dans le programme d'exemple ci-dessous, c'est donc justement cette circonférence qui sera utilisée comme constante dans le programme.

Le grand intérêt des constantes est, qu'une fois déclarées, vous pouvez les utiliser dans n'importe lequel de vos programmes.

Et comme une variable, une constante est composée d'un nom et d'une valeur :



Notez que la valeur n'est pas forcément un nombre, mais peut très bien être là aussi une valeur logique "Vrai/Faux" ou encore un texte.

Toujours simple, n'est ce pas.

Mais là encore, pour pouvoir utiliser un peu de la mémoire du NXT, il va falloir le demander gentiment en lui déclarant que nous souhaitons avoir pour nos programmes une constante d'un certain type, d'une certaine valeur et ayant un certain nom.

C'est le but de la déclaration de constante que nous allons aborder maintenant.


La déclaration de constante




Cette déclaration de constante est très importante et doit être faite avant toutes utilisations des constantes.

Si vous ne faites pas de déclaration de constante, vous ne pourrez tous simplement pas utiliser cette constante dans vos programmes.

Pour déclarer une constante, il faut utiliser l'option "Définir les constantes" du menu Modifier de votre logiciel NXT-G.



Ceci ouvrira une boîte de dialogue vous permettant de créer, modifier ou supprimer vos constantes.



Vous pouvez voir dans ma liste des constantes que certaines d'entre-elles existent déjà !

Notamment, une constante nommée Circonférence roues de type numérique et d'une valeur de 13,57 centimètres.

C'est exactement la valeur de la circonférences des roues de mon robot équipé de roues d'un diamètre de 43,2 millimètres !

Je vous conseille donc de créer cette constante par vous même.

Pour créer une nouvelle constante, il faut d'abord et avant tout cliquer sur le bouton "Créer".

Vous pouvez voir dans la liste votre nouvelle constante ainsi créée.

Il ne vous reste plus qu'à lui donner un nom, le type de données quelle va devoir contenir et une valeur à l'aide des trois champs éponyme de cette fenêtre.

Vous pouvez ainsi créer autant de nouvelles constantes que nécessaire dans vos programmes.

Notez que vous pouvez modifier une constante à tous moment, après sélection de celle-ci dans la liste des constantes, et même la supprimer à l'aide du bouton "Supprimer".

Une fois vos constantes déclarées, un dernier clic sur le bouton "Fermer" finalisera cette déclaration de constante.

Maintenant nous pouvons utiliser la constante que nous venons de déclarer.


Utilisation des constantes




Pour utiliser une constante, il existe dans la palette données du logiciel NXT-G un bloc "Constante".

Voici à quoi il ressemble :




Vous pourrez distinguer dans son panneau de configuration une option nommée Perso pour personnalisée.

Cette option vous permet de définir directement le nom, le type et la valeur de la constante dans son panneau de configuration.

Toutefois, cette constante ne sera définie que pour le programme dans laquelle elle a été définie de cette façon.

Elle ne sera pas disponible pour d'autres programme.

Une seconde option existe, nommée Choisir dans la liste, vous permettant de sélectionner la ou les constantes que vous venez de déclarer.

Sélectionner ainsi la constante que vous voulez utiliser dans la liste affichée sur la droite, comme sur l'image ci-dessous avec la constante nommée "Circonférence roues".



Le bloc "Constante" vous restitue la valeur de cette constante par l'intermédiaire d'un fil de données que vous pouvez utiliser dans votre programme.

Notez que lors de la lecture de cette constante, la valeur de celle-ci reste inchangée et vous retrouverez la même valeur si vous utilisez à nouveau un autres bloc "Constante" pour lire sa valeur.

Voyons maintenant l'utilisation pratique d'une constante.


Programme d'exemple




Comme programme d'exemple, je vous propose de calculer automatiquement le nombre de tour de roues que votre robot devra effectuer pour parcourir une distance mesurée par le capteur d'ultrasons.

Pour cela je vous invite à utiliser la plate-forme suivante.

Ce robot devra être placé face à un mur à une distance quelconque et le programme fera en sorte de mesurer cette distance puis de faire parcourir cette même distance au robot, en prenant une petite marge de sécurité de 2 centimètres.

Commencez donc par déclarer une constante numérique que vous nommerez "Circonférence roues" d'une valeur de 13,57.



Cette constante contient ainsi la circonférence des roues du robot préalablement calculé comme indiqué dans ce tutoriel.

Ensuite, réalisez le programme suivant :









Ce programme relativement simple fonctionne de la manière suivante.

Le bloc "Constante" fournie la valeur de la circonférence des roues, qui sera utilisée plus loin dans les calculs.

Ensuite, le bloc "Ultrasons" effectue une mesure de distance à l'aide du capteur d'ultrasons.

La valeur de cette mesure en centimètre est réduite de 2 à l'aide du premier bloc "Math", pour prendre une marge de sécurité de 2 centimètres, histoire que votre robot n'aille pas s'écraser comme un flanc sur le mur.

Cette valeur de distance est ensuite divisé par la circonférence des roues, grâce au second bloc "Math", de manière à obtenir le nombre de tours de roue que devra effectuer le robot pour parcourir cette distance.

L'opération est donc la suivante, comme vu dans le tutoriel précédemment cité :

Nombre~de~rotations~=~Distance/Circonference



Toutefois, la documentation du bloc "Déplacer" nous indique que la valeur à envoyer au plot de données Durée de ce dernier doit être exprimée en degrés pour un réglage sur Degrés ou Rotations de ce même paramètre dans le panneau de configuration de ce bloc :



De ce fait, il nous faut convertir notre nombre de rotations précédemment calculé en nombre de degrés.

Rien de plus simple, si on se rappel qu'un tour de roue fait toujours 360 degrés. Normal, puisqu'il s'agit d'un cercle.

Donc, il ne nous reste plus qu'à multiplier notre nombre de tours de roue par 360 pour obtenir un résultat exprimé en degrés.

L'opération est donc : Nombre~de~degres~=~Nombre~de~rotations~*~360

C'est exactement ce que fait le troisième bloc "Math" avant d'envoyer le résultat au bloc "Déplacer" via un fil de données.

Ce dernier se chargeant de déplacer le robot d'une distance égale à celle mesurée par le capteur d'ultrasons, moins la marge de sécurité.

Voila une constante que vous pourrez utiliser dans tous vos programmes afin de faire les calculs nécessaire aux parcours des distances à effectuer.

Conclusion



Voila donc déjà la fin de cette partie consacrée aux variables et aux constantes.

Vous serez donc capable maintenant de faire retenir des informations à vos robots pour les utiliser par la suite.

Cela permettra des réalisations bien plus complexes.