logo admiroutes Les automates intelligents
robotique, vie artificielle, réalité virtuelle


information, réflexion, discussion
logo automate © Anne Bedel
Jean-Paul Baquiast Jean-Paul.Baquiast@wanadoo.fr
Christophe Jacquemin christophe.jacquemin@admiroutes.asso.fr

35
Retour au sommaire
Programmer en legOS
(n°8)
La rubrique des passionnés Lego Mindstorms
Brique RCX
par Nanobapt nanobapt@nordnet.fr
http://home.nordnet.fr/%7Emdenayer/
(avec les conseils de Christophe Jacquemin)
31/08/02

NDLR : il est conseillé au lecteur un minimum de base en programmation et langage C. Sinon, il existe de bons bouquins en la matière ou des sites web traitant de la question - par exemple http://www.inf.enst.fr/~charon/CFacile/.

Faire communiquer deux briques RCX

Nous avons présenté dans la précédente fiche le legOS network protocol (LNP) et son utilité. Il est maintenant temps d'aborder la programmation, l'objectif étant que deux robots puissent communiquer entre eux. Pour cela, il vous faudra bien évidemment au minimum deux briques RCX..
La programmation en elle même n'est pas trop difficile. Il suffit de comprendre simplement quelques astuces pour la mettre en oeuvre.

Commençons tout d'abord par l'initialisation et l'écriture des messages infrarouges.

Envoi de message

Pour initialiser l'envoi, il suffit d'appeler la fonction lnp_logical_range(X), X étant variable.
Ainsi :
- donner la valeur 0 à X => envoyer des messages à une courte distance
- donner la valeur 1 => envoyer des messages à une longue distance

Cette fonction sera alors généralement appelée dès le début du programme pour faciliter -ou réduire - l'envoi et la réception des messages par le RCX, et le PC destiné a les recevoir.

Pour écrire un message (integrity => tout le monde peut le recevoir), on utilise la fonction : lnp_integrity_write(const unsigned char
*data,unsigned char length). Je vois déjà sur votre visage la plus grande des perplexités... Rassurez vous. Rien de barbare là-dedans. Ceci consiste ici à passer en paramètre une chaîne de caractères, puis la taille de cette chaîne. Mais inutile de discourir : le programme suivant vous permettra de mieux comprendre tout cela :

#include <lnp/lnp.h>
#include <lnp/lnp-logical.h>

int main()

{
lnp_logical_range(1);
lnp_integrity_write("Hello world", sizeof("Hello world");

}

 

 

 

//messages envoyé en pleine puissance
/*envoyer le message "Hello world"
sizeof ici est utilisé pour definir la taille du message sans avoir a compter les lettres qui composent le message*/

Voila pour la configuration et l'envoi de message.

Réception de message

Tout d'abord, et pour les initiés, sachez qu'avec legOs on n'a pas à vérifier comme c'est le cas avec le langage NQC* (je parle ici pour les initiés) à chaque instant (ou presque) l'état d'un buffer pour savoir si un nouveau message est arrivé. Pour legOS, cette procédure est bannie. En effet une fonction (que vous devrez programmer) est exécutée dès la réception d'un message. Il vous faut donc déclarer cette fonction par
une autre : lnp_integrity_set_handler(lnp_integrity_handler_t handler).
Pour éviter les conflits, le mieux est de copier le message dans une de vos variable et de signaler la présence d'un message par une variable.
Exemple de programme :

#include <lnp/lnp.h>
#include <lnp/lnp-logical.h>
#include <dlcd.h>
#include <conio.h>
char *Msg;
int NewMsg=0;
void post(const unsigned char *data, unsigned char length)


{
memcpy(Msg, data, length);
NewMsg = 1;
}


int main()

{
lnp_logical_range(1);
lnp_integrity_set_handler(post);
while(NewMsg == 0);
cputs(Msg);
return 0;
}

 

 

 





//copier le message dans notre variable
//nouveau message

 

 



// attente d'un nouveau message
// imprimer le nouveau message

Suite au prochain épisode où nous verrons comment installer LNP dans l'ordinateur.

* NQC (ou No Quite C) est un langage s'approchant de la syntaxe du C, permettant aussi de programmer son RCX. (voir par exemple : http://www.oreilly.com/catalog/lmstorms/chapter/ch04.html)


Tous les cours "Programmer en legOS"
Retour au sommaire général