Messagerie maître/esclave
On va voir deux programme, un pour le maître, l'un pour l'esclave. Ces programmes de base vont vous apprendre comment un flux continu de messages rapides peut être géré par un réseau sans fil à deux NXT.
Le programme du maître vérifie d'abord si l'esclave est correctement connecté à la ligne 1 (la constante BT_CONN) à l'aide de la fonction BluetoothStatus(conn); puis construit et envoie des messages avec un préfixe M et un nombre croissant avec SendRemoteString(conn, queue, string), tandis que l'on reçoit des messages de l'esclave avecReceiveRemoteString(queue, clear, string) et affiche les données.
//MAÎTRE
#define BT_CONN 1
#define INBOX 1
#define OUTBOX 5
sub BTCheck(int conn){
if (!BluetoothStatus(conn)==NO_ERR){
TextOut(5,LCD_LINE2,"Error");
Wait(1000);
Stop(true);
}
}
task main(){
string in, out, iStr;
int i = 0;
BTCheck(BT_CONN); //check slave connection
while(true){
iStr = NumToStr(i);
out = StrCat("M",iStr);
TextOut(10,LCD_LINE1,"Master Test");
TextOut(0,LCD_LINE2,"IN:");
TextOut(0,LCD_LINE4,"OUT:");
ReceiveRemoteString(INBOX, true, in);
SendRemoteString(BT_CONN,OUTBOX,out);
TextOut(10,LCD_LINE3,in);
TextOut(10,LCD_LINE5,out);
Wait(100);
i++;
}
}
Le programme esclave est très similaire, mais utilise SendResponseString(queue,string) au lieu de SendRemoteString parce l'esclave doit pouvoir envoyer des messages seulement à son maître, sur la ligne 0.
//ESCLAVE
#define BT_CONN 1
#define INBOX 5
#define OUTBOX 1
sub BTCheck(int conn){
if (!BluetoothStatus(conn)==NO_ERR){
TextOut(5,LCD_LINE2,"Error");
Wait(1000);
Stop(true);
}
}
task main(){
string in, out, iStr;
int i = 0;
BTCheck(0); //teste la connexion avec l'esclave
while(true){
iStr = NumToStr(i);
out = StrCat("S",iStr);
TextOut(10,LCD_LINE1,"Slave Test");
TextOut(0,LCD_LINE2,"IN:");
TextOut(0,LCD_LINE4,"OUT:");
ReceiveRemoteString(INBOX, true, in);
SendResponseString(OUTBOX,out);
TextOut(10,LCD_LINE3,in);
TextOut(10,LCD_LINE5,out);
Wait(100);
i++;
}
}
Vous remarquerez que si un des programmes s'arrête, l'autre continuera à envoyer des messages avec un nombre croissant, sans savoir que tous les messages envoyés seront perdus, car personne ne l'écoute de l'autre côté. Pour éviter ce problème, nous pourrions prévoir un protocole plus fin, avec accusé de réception.
Dostları ilə paylaş: |