NXT-G, leçon n°7 : Boucler, encore et encore...

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 » Dim Fév 01, 2009 9:11 pm

NXT-G, Leçon n°7: Boucler, encore et encore…

Nous sommes pratiquement arrivés à la fin de l'utilisation de la palette commune.
Nous allons maintenant aborder les blocs et les concepts qui permettent l'élaboration de programmes plus sophistiqués que ceux déjà vus (je veux parler des programmes qui consistent à faire évoluer vos robots par de simples marches avant ou arrière, ou de trajectoires circulaires).

Refaites-le à nouveau, …

Rejoignons à nouveau BONG. Supposons encore une fois qu'il dispose d'une paire d'oreilles et qu'il peut comprendre les ordres verbaux.
Je vais lui adresser une série d'instructions inhabituelles:
LEO :cri: > BONG, avance de 3 rotations (du moteur), arrête-toi et tourne à droite.
(BONG avance de 3 rotations, s'arrête puis tourne à droite…)

LEO :cri: > BONG, avance de 3 rotations (du moteur), arrête-toi et tourne à droite.
(BONG avance à nouveau de 3 rotations, s'arrête puis tourne à droite…)

LEO :cri: > BONG, avance à nouveau de 3 rotations (du moteur), arrête-toi et tourne à droite.
(BONG avance de 3 rotations, s'arrête puis tourne à droite…)

LEO :cri: > BONG, avance à nouveau de 3 rotations (du moteur), arrête-toi et tourne à droite.
(BONG avance de 3 rotations, s'arrête puis tourne à droite…)

A votre avis, où se trouve maintenant BONG?
C'est exact - , il est revenu à son point de départ.
Le chemin qu'il a suivi est celui d'un carré et il attend à nouveau mes instructions.

Si vous deviez écrire un programme NXT-G pour que BONG se déplace en suivant un tracé de forme carrée, vous auriez probablement placé 8 blocs "DEPLACER" sur le rayon de séquence, tels que présentés ci-dessous, et configuré chaque bloc DEPLACER avec les 2 mêmes propriétés. Exact?
Un bloc DEPLACER qui entraîne les moteurs B et C durant 3 rotations, et un 2ème bloc DEPLACER pour exécuter un virage à droite. Cette paire de blocs étant ensuite répétée 3 fois, soit un total de 8 blocs.

Image

Bien, cela aurait sans doute marché. Mais c'est aussi dépenser beaucoup d'énergie pour que BONG suive un tracé en forme de carré pour revenir finalement à sa position de départ. Y aurait-il une meilleure solution?
Essayons d'améliorer le pseudo-code:
LEO :cri: > BONG, avance de 3 rotations (du moteur), arrête-toi et tourne à droite.
(BONG avance de 3 rotations, s'arrête puis tourne à droite…)

LEO :cri: > BONG, répète ma première paire d'instructions 3 fois.

(BONG avance de 3 rotations, s'arrête puis tourne à droite…)
(BONG avance de 3 rotations, s'arrête puis tourne à droite…)
(BONG avance de 3 rotations, s'arrête puis tourne à droite…)

Beaucoup mieux! J'ai seulement lancé 2 instructions: une pour la marche, une autre pour la répétition (3 fois), et j'ai économisé ma voix! Cela n'a pas empêché BONG d'exécuter parfaitement le travail demandé.
Dans le pseudo-code j'ai donné à BONG un ordre et mis une condition.
Cette condition est tout simplement une règle que doit suivre BONG. Dans notre cas cette règle consiste à répéter 3 fois ce couple d'instructions. Tant que BONG a connaissance de la règle et qu'il la suit, peu importe le nombre de répétitions; cela peut-être 1,100 ou plus.

Au lieu de lui demander de répéter 3 fois la règle, puis-je utiliser une condition différente? Oui, évidemment.
Voici quelques exemples:
LEO :cri:> BONG répète ma première paire d'instructions jusqu'à ce que le capteur tactile soit heurté.
LEO :cri:> BONG répète ma première paire d'instructions jusqu'à ce que le Minuteur dépasse 45 secondes.
LEO :cri:> BONG répète ma première paire d'instructions indéfiniment.
C'est une autre façon de dire à BONG d'exécuter certaines instructions, et lui demander de les reproduire jusqu'à ce que "quelque chose survienne" (cela me rappelle la leçon n°6 …).
Et si BONG reproduit encore et encore ces instructions, on peut penser qu'il tourne en rond sur lui-même, qu'il boucle… C'est exactement ce qu'il fait: il BOUCLE sur lui même.
Et dans la vie de tous les jours, qu'est-ce une boucle? Ce peut-être un chemin circulaire, un objet qui tourne sur lui même, un geste répétitif. Et de plus, elle échappe à la notion de dimension, de quantité.

Si vous suivez un chemin circulaire, vous vous retrouverez forcément à votre point de départ. Une boucle de programmation est tout à fait semblable: elle tourne sur elle même, parfois indéfiniment jusqu'à ce que vous programmiez une sortie de boucle.
Et il se trouve que le logiciel NXT-G dispose d'un bloc spécialement conçu pour l'occasion: le bloc BOUCLE.

Image

Pas très séduisant, ce bloc! Il est configuré dans la zone Contrôle sur Pour toujours.
Bien, maintenant chaque fois que j'introduirai à l'intérieur de cette boucle un bloc quelconque, ce dernier sera répété en permanence.
Prenons un exemple:
Je vais glisser à l'intérieur du bloc BOUCLE, un bloc DEPLACER ayant les caractéristiques suivantes: moteurs raccordés aux ports B et C, avec une rotation moteurs en marche avant.

Image

Vous avez déjà remarqué que le bloc BOUCLE s'adapte automatiquement en s'élargissant pour recevoir le bloc DEPLACER. Il en sera toujours de même chaque fois qu'un nouveau bloc sera installé à l'intérieur de la BOUCLE.
Sauvegardons ce petit programme et faisons le exécuter par BONG.
BONG avance d'une rotation (de moteur), puis une très courte pause. Ensuite BONG avance encore d'une rotation, puis une nouvelle courte pause. Cela se poursuit de la même façon, jusqu'à ce que fatigué d'attendre ces répétitions, je décide d'arrêter le programme.
La pause survient quand le bloc DEPLACER termine son action et que le bloc BOUCLE vérifie sa condition. (cela se produit très rapidement).
N'oubliez pas que la condition est une règle que le robot doit suivre.
Pour ce bloc BOUCLE, la règle est ici de continuer "pour toujours" . Cela explique pourquoi le moteur tourne et tourne sans arrêt avec la courte pause à chaque tour.

Nous allons maintenant changer la condition. Comment dire à BONG de faire tourner le bloc DEPLACER 4 fois?
Jetez un coup d'oeil sur le panneau de configuration (ci-dessous). Vous remarquerez que la zone Contrôle dispose dans le champ de saisie d'un menu déroulant avec 5 options.

Option "Compter"

Image

Choisissez "Compter", puis dans la zone de saisie "Compter", tapez 4. Vous devez taper ici une valeur entière. Les valeurs négatives ou zéro sont exclues.
Pour vérifier que le compte est bon, nous modifierons le programme en lui ajoutant un top sonore, qu'il suffira de compter pour la vérification.

Image

BONG va donc exécuter 4 rotations suivies chacune d'un top sonore.

Option "Temps"

Revenons à présent sur les 5 options proposées, et commençons par la plus simple "Temps".

Image

Dans cette option, vous préciserez dans le champ "Secondes" le temps alloué à la boucle; ici 25 sec. Cela signifie que tous les blocs situés à l'intérieur de la BOUCLE agiront pendant ces 25 secondes. En fixant cette limite de temps, vous avez aussi signifié à la BOUCLE sa sortie (loop break, en anglais). Au bout de 25 secondes, le programme se poursuivra ou s'arrêtera si aucun autre bloc ne suit le bloc BOUCLE.
Facile, non? La BOUCLE peut s'interrompre si vous annulez le programme, mais elle peut aussi être configurée pour s'interrompre si elle rencontre une condition particulière. C'est le cas déjà cité par exemple, d'un capteur tactile heurté.

Une remarque importante: s'il existe une ou des boucles à l'intérieur d'une boucle principale (on parle ici de "boucles imbriquées"), toutes les boucles internes seront exécutées avant que l'on sorte de la boucle principale.
Si par exemple, une boucle interne a une durée fixée à 40 secondes, elle sera exécutée, et la boucle externe (fixée à 25 sec.) ne sera pas répétée.

Autre remarque: dans la zone "Montrer", une case à cocher se trouve près de la petite icône "Compteur". Si vous cochez cette case un plot de données apparaît sur la partie gauche du bloc. Vous avez activé le plot compteur qui fournit à chaque reprise de la boucle le nombre de répétition. Les valeurs correspondantes sont transmises par le plot, grâce à un fil de données, à d'autres blocs pour les besoins du programme.

Option "Pour toujours"

Cette option a déjà été vue en début de la leçon, et elle est aussi simple que la précédente.
La boucle ne fait que répéter indéfiniment les bloc qu'elle contient et ne s'arrêtera que si le programme est interrompu ou si les piles sont hors service.

Option "Capteur"

Vous allez à présent choisir dans la zone Contrôle l'option capteur.
Vous remarquerez que le Capteur tactile est sélectionné par défaut.
Mais dans la zone Capteur, le champ de saisie - grâce à un sous-menu déroulant - permet de sélectionner celui utile pour votre programme (On y trouve même ceux que vous avez acquis et installés en complément du kit # 8527 - PF IRLink dans notre cas).

Image

Ils ont été déjà vus dans la leçon n°5 et sont d'un usage simple. La seule chose que vous devez déterminer est le point de déclenchement qui provoquera la sortie de boucle. Ceci a été également abordé dans cette leçon.
Nous allons prendre l'exemple du capteur à ultrasons.

Image

Dans cet exemple, le capteur à ultrasons est paramétré avec un point de déclenchement à 1,00 mètre. A noter également l'activation de la case compteur (le plot est visible à l'entrée de la boucle) pour permettre de récupérer la valeur du nombre de cycles.
Le bloc DEPLACER fait avancer le robot d'une rotation, suivi d'une légère pose, puis le cycle reprend tant que la distance entre le capteur fixé sur le robot, et un obstacle devant lui reste inférieure à 1 mètre. Dès que cette distance est atteinte, la boucle s'interrompt et le programme s'arrête.

Voici un autre exemple avec les boutons du NXT.
Le robot avance d'une rotation, émet un top sonore puis fait une légère pause. Cette action se répète inlassablement jusqu'au moment ou on appuie sur le bouton flèche gauche du NXT; la boucle s'interrompt alors et le programme se termine.

Image

Option "Logique"

C'est la dernière option qui interrompt une boucle; elle se présente ainsi dans l'exemple qui suit:

Image

Plusieurs remarques:
D'abord, le plot de données à gauche de la boucle est visible, puisque la case Compteur a été cochée. Je rappelle que par ce plot on peut récupérer en sortie, une valeur numérique qui est le nombre de cycles de la boucle.
Ensuite, et c'est le seul cas, un plot de données à droite de la boucle, qui accepte uniquement en entrée une valeur logique Oui ou Non. La valeur de défaut est précisée dans la zone "Jusque" avec Vrai comme choix, mais on pourrait choisir aussi Faux.
Cela signifie que la boucle s'exécute, quand la valeur sélectionnée (ici Vrai) est reçue (c'est une entrée de donnée).
En clair, tant que la valeur logique est VRAI, la boucle se répète. Dès que la valeur passe à FAUX, on sort de la boucle et le programme s'arrête.
Cet exemple illustre l'utilisation de cette option:

Image

J'ai ajouté un bloc Ultrasons réglé suivant le panneau de configuration. Ensuite j'ai ouvert son Hub de plots de données pour relier le plot logique à celui de la boucle. J'ai enfin refermé le Hub, qui ne laisse visible que le plot utilisé, ici v/x.
Que se passe-t-il?
Le robot avance d'une rotation, émet un top sonore, puis fait une légère pause. Ensuite le capteur Ultrasons mesure la distance par rapport à un obstacle. Tant que la distance mesurée est inférieure à 30 cm, la boucle se répète. Dès que cette valeur est atteinte, on sort de la boucle et le programme s'arrête. Voilà une manière de sortir d'une boucle, sans intervention autre que celle du robot lui-même.
On aurait pu utiliser un autre capteur comme le Sonore qui aurait agit en fonction du niveau sonore (frapper des mains par exemple).

Je vous laisse maintenant écrire des programmes selon votre imagination et l'équipement de votre MOC. Exercez-vous pour maîtriser ce type d'action.

A suivre…
A+
Roboleo
" Je ne cherche pas, je trouve…" P. Picasso

Avatar de l’utilisateur
semtou
Level 7
Level 7
 
Messages: 525
Localisation: Toulouse
Âge: 55 ans

Messagepar semtou » Jeu Fév 05, 2009 9:55 am

Salut roboleo, Je repasse à la programmation. :help: Pourrais tu m'aider pour un morceau de programme que je n'arrive pas à concevoir ? Voila je voudrai entrer un chiffre à l'aide des touches droite et gauche du nxt puis validé avec la touche enter orange pour lancé la suite du programme avec une variable numérique. Bref ça à l'air simple mais les touches du clavier du nxt ne sont accessibles que l'une après l'autre. Je cherche donc un moyen d'incrémenter une variable avec la touche droite, de la décrémenté avec la touche gauche et de sortir de la boucle dès que j'ai ma valeur dans la valise par la touche orange. J'ai fais plusieurs essais et c'est la cata :grr: je suis à cours d'idées et de nerf :ouch: si tu peux faire quelque chose pour moi... A+
"Ce qui se conçoit bien s’énonce clairement et les mots pour le dire viennent aisément..." Nicolas Boileau-Despreaux
Mon blog = http://semtou.skyrock.com/
Ma galerie photos = http://www.brickshelf.com/cgi-bin/gallery.cgi?m=SEMTOU

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

Messagepar roboleo » Jeu Fév 05, 2009 2:28 pm

Les 3 boutons sont considérés comme 3 capteurs indépendants. Il faut donc 3 blocs pour les utiliser.
Sans approfondir, et à vue de nez je dirais qu'il faut une boucle externe et dedans un interrupteur (switch) avec 3 choix possibles (ou 3 boucles imbriquées) ainsi que 3 variables:
V1 pour touche gauche,
V2 pour touche droite,
V3 pour touche validation.
Puis, à l'aide de 2 compteurs, incrémenter V1 et décrémenter V2 dans le switch
(le compteur pourrait être une routine genre MON BLOC)
On commence par valider V3, puis,
On compare V1 à V3, et V2 à V3 (en logique)
Si (V1 = V3) ou (V2 = V3) alors on sort de la boucle principale.

Reste à construire le programme en NXT-G; plus difficile qu'il ne paraît!
Je vais réfléchir… :reflechi:
A+
Roboleo
" Je ne cherche pas, je trouve…" P. Picasso

Avatar de l’utilisateur
semtou
Level 7
Level 7
 
Messages: 525
Localisation: Toulouse
Âge: 55 ans

Messagepar semtou » Sam Fév 07, 2009 9:32 am

Merci roboléo, je pense avoir compris le principe, je vais voir si j'y arrive dans la réalisation. j'ai plusieurs modifications de mon robot en cours à cause des différentes limites lier à l'utilisation du PFS. Du fait que j'utilise un mode de construction un peu particulier, je passe beaucoup de temps (la nuit) sur les parties mécaniques du robot. Je fais quand même des pauses pour programmer un peu. A +
"Ce qui se conçoit bien s’énonce clairement et les mots pour le dire viennent aisément..." Nicolas Boileau-Despreaux
Mon blog = http://semtou.skyrock.com/
Ma galerie photos = http://www.brickshelf.com/cgi-bin/gallery.cgi?m=SEMTOU

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

Messagepar roboleo » Mar Fév 10, 2009 7:31 pm

NXT-G, Leçon n°7: Boucler, encore et encore… (suite et fin)

Nous allons maintenant travailler sur quelques exemples.

Exercice n°1:
D'abord une réponse à une question posée par Tutur, visiteur du Forum:
Rappel de son problème:
"… on voit que le robot avance de 10 rotations vers l'avant et dit qu'il voit quelque chose de trop près il recule de 5 rotations.
mais le problème c'est que la deuxième action ne se fait que si la première est finie, et je voudrais que l'action de reculer puisse se faire même pendant les 10 rotations."
La proposition d'Alban est la suivante:

Image
Les panneaux de configuration des blocs dans la boucle sont ainsi définis:

Image

Le bloc LOGIQUE réunit les conditions de chacun des capteurs dans l'opération OU (qui s'utilise comme le bloc COMPARER). Cela permet justement la simultanéité des 2 conditions.
Je vous laisse le soin de tester ce programme.

Exercice n°2
Voici deux programmes strictement identiques sauf le fil de données qui existe dans le 2 ème cas.
(Le bloc STOP fait exactement ce qu'il est: il arrête le programme à l'endroit où il se trouve placé.)
A votre avis, comment se comporteront-ils?

Image

Image

Dans quel cas le top sonore se fera-il entendre? Pourquoi?

Exercice n°3
Cette boucle affiche en permanence sur l'écran du NXT la distance mesurée par le capteur Ultrasons. La distance est stockée dans une variable (Nombre 1), puis elle est convertie en mode texte pour être affichée. Le bouton Entrée du NXT permet de sortir de la boucle. Cette sortie est confirmée par un top sonore.
Les deux blocs "AFFICHER" extrêmes comportent des textes fixes pour expliciter la valeur de la distance ( "Distance Objet" et "cm")

Image

Exercice n° 4
Cette boucle affiche la valeur du niveau lumineux en passant par le bloc TEXTE. Dans A la valeur de l'intensité en mode texte, en B un texte d'accompagnement (ici "Valeur Capt"), C vide. Le résultat apparaît sous la forme "65 Valeur Capt".
Une fois le programme lancé, la touche ENTREE permet de lire et d'afficher la valeur du capteur. Pour sortir de la boucle on appuie sur la flèche gauche. En réappuyant sur la touche ENTREE on relance la mesure. Par le jeu de ces 2 boutons, on arrête et relance le programme.

Image

A vous maintenant d'imaginer une boucle faisant usage du bloc SON.

BOUCLES IMBRIQUEES:

Cette expression est souvent employée pour signifier que plusieurs boucles (chargées d'accomplir des actions différentes), sont astucieusement entremêlées pour relancer un processus complexe; le dispositif se répétant jusqu'à ce que vous décidiez d'y mettre fin.
Pour expliquer ce concept, je vais imaginer un simple programme pour BONG dont j'aimerais bien vous confier la réalisation.

Mais d'abord, laissez-moi vous expliquer ce que BONG devrait faire en utilisant un pseudo-code:
LEO :cri: > BONG, je voudrais une avancée sur un tracé circulaire pendant 3,5 rotations du moteur, suivi d'un top sonore.
Recommencer cette manoeuvre encore 2 fois (soit 3 au total), puis, vérifier que le capteur photosensible détecte un niveau lumineux supérieur à 90.
Si le point de déclenchement n'est pas atteint, recommencer tout le processus.

Je vais donc concevoir une BOUCLE comprenant un bloc DEPLACER et un bloc SON; cette boucle sera répétée 3 fois.

Image

Je vais maintenant ajouter un bloc CAPTEUR PHOTOSENSIBLE et fixer le point de déclenchement à 90.

Image

Mais maintenant, j'ai un problème. Si vous examinez le programme, on constate que la boucle se répète 3 fois avec à l'intérieur un bloc DEPLACER suivi d'un bloc SON, puis on sort de la boucle. Ensuite le bloc CAPTEUR PHOTOSENSIBLE est testé. Si le niveau lumineux est supérieur à 90, le programme se termine. Mais que se passe-t-il, si le niveau est inférieur à 90?
Comment puis-je obliger le programme à redémarrer?
Une des réponses, consiste à demander à BONG de recommencer le programme. Il faudra donc appuyer sur le bouton ENTREE du NXT pour faire redémarrer ce programme. Cela fonctionnera mais d'une façon laborieuse. Il doit bien y avoir une solution plus astucieuse.

Examinez à présent cette modification. Vous remarquerez que le petit programme se trouve INCLUS dans une autre BOUCLE. J'ai aussi remplacé le bloc CAPTEUR PHOTOSENSIBLE de la palette Commun, par le même capteur, mais pris cette fois-ci dans la palette Complète (pour disposer des plots de données).

Image

Ce que vous avez sous les yeux est une BOUCLE IMBRIQUEE, une BOUCLE dans une BOUCLE.
Quand le programme se déroule, chaque bloc à l'intérieur de la BOUCLE EXTERNE s'exécute. D'abord les blocs placés dans la boucle INTERIEURE répétés 3 fois (Blocs DEPLACER et SON). Puis on sort de cette boucle. Ensuite, le CAPTEUR PHOTOSENSIBLE envoie une information logique VRAI / FAUX vers le plot de données de la BOUCLE EXTERNE. Si le niveau lumineux détecté est inférieur à 90, la boucle n'est pas rompue et elle recommence son cycle. Dès que la valeur 90 est atteinte, on sort de la BOUCLE EXTERNE et le programme se termine.
Vous avez remarqué le fil de données reliant le plot v/x du bloc CAPTEUR PHOTOSENSIBLE à celui de la BOUCLE EXTERNE. Dans le panneau de configuration le contrôle se fait par une valeur Logique. Voici une méthode très utile pour sortir d'une boucle en utilisant un capteur; n'importe quel capteur.

Et pour terminer cette leçon, je vous propose cet exemple, une situation complexe. Pouvez-vous expliquer ce qu'il fait?

Image

Oui, c'est une BOUCLE, dans une BOUCLE, dans une BOUCLE - 3 blocs BOUCLES IMBRIQUEES.
Quand on lance le programme, que constate-t-on?
D'abord débute la boucle du plus bas niveau: bloc DEPLACER jusqu'à ce que le capteur TACTILE soit actionné (ici Appuyé). La boucle est alors rompue.
Puis c'est la boucle intermédiaire qui se répète: un autre bloc DEPLACER jusqu'à ce que le point de déclenchement du capteur à ULTRASONS soit atteint. Arrivé à cette valeur la 2ème boucle est rompue à son tour.
Enfin tout se termine sur la boucle EXTERNE: un dernier bloc DEPLACER jusqu'à ce que le point de déclenchement du capteur SONORE est atteint. A ce moment, c'est la sortie de boucle et le programme s'arrête.

Rappelez-vous: dans le cas de BOUCLES IMBRIQUEES, le programme commence toujours par la boucle de plus bas niveau et se termine par la boucle de 1er niveau.

En conclusion, retenez que le bloc BOUCLE est un bloc puissant et très utile. Aussi, je vous conseille de vous exercer en utilisant toutes les options; vous l'emploierez souvent pour les nombreuses tâches répétitives de vos robots.
A+
Roboleo
" Je ne cherche pas, je trouve…" P. Picasso

cybermaster
Level 11
Level 11
 
Messages: 2205
Localisation: Valence
Âge: 29 ans

Messagepar cybermaster » Ven Fév 20, 2009 6:33 pm

Dans l'exercice 3 :

Image


Je ne comprend pas pourquoi mettre une variable ? De toute façon, moi, j'ai jamais bien compris grand chose des variables ... :oops:
Image

Le jour où on mettra les con* sur orbite, j'en connait qui n'ont pas fini de tourner

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

Messagepar roboleo » Ven Fév 20, 2009 8:27 pm

cybermaster a écrit:Dans l'exercice 3 :

Je ne comprend pas pourquoi mettre une variable ? De toute façon, moi, j'ai jamais bien compris grand chose des variables ... :oops:

Le NXT doit garder en mémoire et en permanence, une distance mesurée par le capteur.Le robot étant mobile, cette distance varie en fonction de sa position. Si on veut afficher en temps réel cette distance variable, il faut conserver quelque part la précédente mesure.
Pour simplifier, une variable est un "conteneur" qui sert à conserver en mémoire une valeur qui est sans cesse remplacée par une autre.
L'icône VALISE est bien choisie: on peut y mette "n'importe quoi", la valise ne sert qu'à transporter ce "n'importe quoi" quelque part pour être réutilisé plus tard.
Une leçon est prévue pour expliquer tout çà… ;)
A+
Roboleo
" Je ne cherche pas, je trouve…" P. Picasso

cybermaster
Level 11
Level 11
 
Messages: 2205
Localisation: Valence
Âge: 29 ans

Messagepar cybermaster » Ven Fév 20, 2009 8:47 pm

Je ne comprend toujours pas pourquoi la placer dans ce cas présent :(

Ce programme est très proche du mien pour mon sonar, et cela marche très bien sans variable ;)

Après, si tu utilise ce programme pour le mettre dans un autre programme qui utilise une distance du capteur ultrasons, ok je comprend. Mais dans le cas présent, je ne comprend pas trop :(
Image

Le jour où on mettra les con* sur orbite, j'en connait qui n'ont pas fini de tourner

Avatar de l’utilisateur
Alban42800
Level 11
Level 11
 
Messages: 2473
Localisation: Loire (42)
Âge: 51 ans
expertgbbexpertnxtvainqueurconcours

Messagepar Alban42800 » Ven Fév 20, 2009 10:39 pm

cyber a raison !
Le fil qui sort d'un capteur "contient" la valeur pour la transmettre au bloc suivant et même à plusieurs blocs suivants.
Dans le cas d'une boucle cette valeur est perdue pour l'exécution suivante de la boucle. Vu que tu fais une nouvelle lecture du capteur US tu as une nouvelle valeur de disponible dans le fil de sortie à chaque exécution de la boucle.
Le bloc variable n'est pas nécessaire.
Il serait nécessaire si tu voulais connaître la valeur lue dans l'exécution précédente de la boucle.

Avatar de l’utilisateur
Anio
Administrateur
Administrateur
 
Messages: 19495
Âge: 37 ans
revieweurmoceurstarwarsexpertambassadeur

Messagepar Anio » Ven Fév 20, 2009 10:43 pm

J'ai rien pigé. Alors j'me la boucle. :fume:




:lolroule:
Think outside the box.

Tout plein de liens utiles dans mon profil ! :P

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

Messagepar roboleo » Sam Fév 21, 2009 12:44 am

cybermaster a écrit:Je ne comprend toujours pas pourquoi la placer dans ce cas présent :(

Après, si tu utilise ce programme pour le mettre dans un autre programme qui utilise une distance du capteur ultrasons, ok je comprend. Mais dans le cas présent, je ne comprend pas trop :(


Alban42800 a écrit:cyber a raison !

Le bloc variable n'est pas nécessaire.

Bien sûr que çà marche sans ce bloc! Surtout si on ne veut pas faire autre chose…

En effet, la variable sert pour un autre usage; le contenu est au chaud et doit servir à aller plus loin; par exemple utiliser cette distance avec un paramètre d'un autre capteur pour déclencher une action particulière (un son modulé, une représentation graphique, etc…).
Et puis je ne vous ai pas tout dit; j'essaie de vous familiariser avec des blocs que l'on n'a pas encore étudiés, progressivement, j'élargis votre horizon!
A+
Roboleo
" Je ne cherche pas, je trouve…" P. Picasso

Darth Bug
Level 4
Level 4
 
Messages: 55

Messagepar Darth Bug » Sam Fév 21, 2009 10:00 am

:gasp: Je vais peut-être commencé par la leçon n°1

Avatar de l’utilisateur
semtou
Level 7
Level 7
 
Messages: 525
Localisation: Toulouse
Âge: 55 ans

Messagepar semtou » Lun Fév 23, 2009 12:45 pm

Ok merci roboleo, pour ma part c'est bon, c'est juste que j'utilise pas toujours les bons blocs. Comme tu le sais j'utilise maintenant leJOS et les java mais je m'intéresse toujours au possibilité du NXT et donc de tous les moyens de le programmer. Petite question sur les boucles imbriquées : si aucune des conditions des 3 boucles ne sont valide, que fait le nxt ? ( Il tourne en boucle en attendant un événement ? ) a +
"Ce qui se conçoit bien s’énonce clairement et les mots pour le dire viennent aisément..." Nicolas Boileau-Despreaux
Mon blog = http://semtou.skyrock.com/
Ma galerie photos = http://www.brickshelf.com/cgi-bin/gallery.cgi?m=SEMTOU

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

Messagepar roboleo » Lun Fév 23, 2009 1:45 pm

semtou a écrit:Ok merci roboleo, pour ma part c'est bon, c'est juste que j'utilise pas toujours les bons blocs. Comme tu le sais j'utilise maintenant leJOS et les java mais je m'intéresse toujours au possibilité du NXT et donc de tous les moyens de le programmer. Petite question sur les boucles imbriquées : si aucune des conditions des 3 boucles ne sont valide, que fait le nxt ? ( Il tourne en boucle en attendant un événement ? ) a +

Le robot se déplace et commence par la boucle intérieure la plus "profonde": ici boucle tactile. Si on ne fait rien, il reste dans cette boucle indéfiniment.
qand on appuie sur le bouton capteur tactile, on sort de la boucle et on passe dans la boucle suivante: boucle ultrasons, il reste dans cette boucle tant que le point de déclenchement n'est pas atteint. Si on dépasse ce point, on sort de la boucle et on passe dans la dernière boucle: boucle Son. Là aussi, tant qu'on reste en dessous du point de déclenchement, le robot continue à se déplacer. Dès que cette valeur est atteinte, on sort de la dernière boucle et le programme se termine. Le robot s'arrête.
Les conditions sont dans ce programme associées aux capteurs, et leurs paramètres déterminent les sorties de boucle. Il y a ici TOUJOURS UNE condition de sortie par définition.
Il en est différemment avec le bloc COMMUTATEUR.
Dernière édition par roboleo le Lun Fév 23, 2009 5:46 pm, édité 1 fois au total.
A+
Roboleo
" Je ne cherche pas, je trouve…" P. Picasso

Avatar de l’utilisateur
semtou
Level 7
Level 7
 
Messages: 525
Localisation: Toulouse
Âge: 55 ans

Messagepar semtou » Lun Fév 23, 2009 4:55 pm

Bon d'accord pour les sorties de boucles imbriquées c'est du : jusqu'à ce que exclusif. Mais alors qui sont ses blocs AUTOCOMMUTATEURS ?
"Ce qui se conçoit bien s’énonce clairement et les mots pour le dire viennent aisément..." Nicolas Boileau-Despreaux
Mon blog = http://semtou.skyrock.com/
Ma galerie photos = http://www.brickshelf.com/cgi-bin/gallery.cgi?m=SEMTOU


Retourner vers De la théorie à la pratique

Qui est en ligne ?

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