Utilisation d'un éditeur Nous allons utiliser le logiciel libre Gedit afin d'écrire nos programmes. Si vous êtes sous Debian ( ou debian-like ) et qu'il n'est pas installé, IL suffit de l'installer via cette commande : sudo apt-get install



Yüklə 0,51 Mb.
səhifə39/43
tarix04.01.2022
ölçüsü0,51 Mb.
#61490
1   ...   35   36   37   38   39   40   41   42   43
Envoi de numéros avec accusés

Ici, nous voyons un autre couple de programmes : cette fois, le maître envoie des nombres avec SendRemoteNumber(connqueuenumbre) et cesse d'attendre les accusés de l'esclave; que si l'esclave est à l'écoute et envoi l'accusé, le maître continue en envoyant le message suivant. Les esclaves reçoivent simplement le numéro avecReceiveRemoteNumber(queueclearnumber) et envoie l'accusé avec SendResponseNumber. Vos programmes maître-esclave doivent avoir un code commun pour les accusés de réception, personnelement, je choisis la valeur 0xFF hexadecimale.

Le maître envoie des nombres aléatoires et attend les accusés esclaves; chaque fois qu'il reçoit un accusé de réception avec le bon code, la variable ack doit être réinitialisée, faute de quoi le maître continuera à envoyer sans nouveaux accusés, car la variable est nulle.

L'esclave vérifie en permanence la boîte aux lettres et, si elle n'est pas vide, affiche la valeur lue et envoie un accusé de réception au maître. Au début du programme, j'ai choisi d'envoyer un accusé de réception sans la lecture des messages pour débloquer le maître, en fait, sans cette astuce, si le programme maître est lancé en premier, il serait mort, même si nous lançons un esclave plus tard. De cette façon, les premiers messages peuvent se perdre, mais vous pouvez démarrer des programmes maître et esclave à différents moments, sans risque d'accrochage.



//MAÎTRE

 

#define BT_CONN 1



#define OUTBOX 5

#define INBOX 1

#define CLEARLINE(L) \

TextOut(0,L," ");

 

sub BTCheck(int conn){



if (!BluetoothStatus(conn)==NO_ERR){

TextOut(5,LCD_LINE2,"Error");

Wait(1000);

Stop(true);

}

}

 



task main(){

int ack;


int i;

BTCheck(BT_CONN);

TextOut(10,LCD_LINE1,"Master sending");

while(true){

i = Random(512);

CLEARLINE(LCD_LINE3);

NumOut(5,LCD_LINE3,i);

ack = 0;


SendRemoteNumber(BT_CONN,OUTBOX,i);

until(ack==0xFF) {

until(ReceiveRemoteNumber(INBOX,true,ack) == NO_ERR);

}

Wait(250);



}

}

//ESCLAVE

#define BT_CONN 1

#define OUT_MBOX 1

#define IN_MBOX 5

 

sub BTCheck(int conn){



if (!BluetoothStatus(conn)==NO_ERR){

TextOut(5,LCD_LINE2,"Error");

Wait(1000);

Stop(true);

}

}

 



task main(){

int in;


BTCheck(0);

TextOut(5,LCD_LINE1,"Slave receiving");

SendResponseNumber(OUT_MBOX,0xFF); //unblock master

while(true){

if (ReceiveRemoteNumber(IN_MBOX,true,in) != STAT_MSG_EMPTY_MAILBOX) {

TextOut(0,LCD_LINE3," ");

NumOut(5,LCD_LINE3,in);

SendResponseNumber(OUT_MBOX,0xFF);

}

Wait(10); // pause (optionnelle)



}

}


Yüklə 0,51 Mb.

Dostları ilə paylaş:
1   ...   35   36   37   38   39   40   41   42   43




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin