\b;Exercice
Télécommandez un robot par le biais d'une \l;station relais\u object\exchange; pour qu'il passe par les 6 croix bleues. Les 3 acteurs principaux de cet exercice sont:
 
1) Un \l;robot préhenseur\u object\botgr; sans batterie, donc immobile. C'est lui l'émetteur que vous devez programmer.
2) Une \l;station relais\u object\exchange; qui reçoit des informations de l'émetteur puis les transmet au récepteur.
3) Un \l;robot d'entraînement\u object\bottr; qui attend les ordres de la station. Ce robot est déjà programmé.

\image tremot2a 16 8;
Une station relais stocke des couples "nom/valeur". Pour commander le robot esclave, nous avons choisi d'utiliser deux couples:

1) nom="order", valeur=numéro de l'opération à effectuer
2) nom="param", valeur=paramètre de l'opération

L'ordre #1 signifie "move" et l'ordre #2 signifie "turn". Le paramètre est la distance à avancer ou l'angle à tourner. Par exemple, pour demander au robot esclave d'avancer de 20 mètres, il faut écrire:
\c;\s;	send("order",  1, 100);  // ordre "move"
\s;	send("param", 20, 100);  // distance de 20 mètres
\n;
Ces deux instructions \c;\l;send\u cbot\send;\n; envoient les deux informations suivantes dans la station relais:
\c;    order=1
    param=20
\n;
Le robot esclave attend un ordre puis l'exécute. Lorsque l'exécution est terminée, il supprime l'ordre de la station relais. Après avoir envoyé un ordre, le robot émetteur doit donc attendre la disparition de l'ordre dans la station relais, signe que l'esclave a terminé sa tâche. Cela s'écrit ainsi, avec l'instruction \c;\l;testinfo\u cbot\testinfo;\n;:
\c;\s;	while ( testinfo("order", 100) )  // attendre la fin du travail
\s;	{
\s;		wait(1);
\s;	}
\n;
Comme il faudra donner plusieurs ordres, il est plus simple de créer une \l;fonction\u cbot\function; \c;SendToPost\n; qui se charge d'envoyer un ordre puis d'attendre son exécution:
\c;\s;void object::SendToPost(float order, float param)
\s;{
\s;	send("param", param, 100);  // envoyer le paramètre
\s;	send("order", order, 100);  // envoyer l'ordre
\s;
\s;	while ( testinfo("order", 100) )  // attendre la fin du travail
\s;	{
\s;		wait(1);
\s;	}
\s;}
\n;
Pour donner l'ordre d'avancer de 20 mètres, il suffit alors d'écrire, dans le programme principal:
\c;\s;	SendToPost(1, 20);  // move(20);
\n;
Voilà le parcours que le robot esclave doit effectuer:

\image tremot2b 8 8;
A vous de terminer le programme ...

\t;Voir aussi
\l;Exercice précédent\u tpyta;, \l;programmation\u cbot;, \l;types\u cbot\type; et \l;catégories\u cbot\category;.
