\b;Exercice
Télécommandez un robot par le biais d'une \l;borne d'information\u object\exchange; pour qu'il passe par les 6 croix bleues. Les 3 acteurs principaux de cet exercice sont:
 
1) Un \l;robot déménageur\u object\botgr; sans pile, donc immobile. C'est lui l'émetteur que vous devez programmer.
2) Une \l;borne d'information\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 borne. Ce robot est déjà programmé.

\image tremot2a 16 8;
Une borne 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);  // order "move"
\s;	send("param", 20, 100);  // distance
\n;
Ces deux instructions \c;\l;send\u cbot\send;\n; envoient les deux informations suivantes dans la borne:
\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 borne. Après avoir envoyé un ordre, le robot émetteur doit donc attendre la disparition de l'ordre dans la borne, 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) )  // wait end of work
\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);  // send the parameter
\s;	send("order", order, 100);  // send the order
\s;
\s;	while ( testinfo("order", 100) )  // wait end of work
\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; et \l;programmation\u cbot;.
