當你手上有兩台樂高 NXT 時如果可以互動的話應該會更有趣,在這個想法下又買了一台 NXT 8547 所以來試試看兩台NXT要如何互傳資料。
首先要區分誰要當Master與Slave而Master的代號是0、Slave的代號為1、2、3,因此Master只能有一台而Slave最多三台也就是連線時最多是一對三。
每一台NXT 可以接收訊息的MailBox有10個每個MailBox只能存一則訊息 ,雖然不多可是善加利用也可以做出許多不同的組合。
首先你必須先讓AB兩台NXT建立信任的藍芽連線,由A找B的話A就是Master(0)、B就是Slave(1)
再來就是Master與Slave程式碼
Master 範例
#define BT_CONN 1 //指定與第一台Slave連線
#define INBOX 1 //接收Slave傳來的資料位置
#define OUTBOX 2 //傳送到Slave的信箱位置
sub BTCheck (int conn){
if (!BluetoothStatus(conn)==NO_ERR){
TextOut(5,LCD_LINE2,"BT Error"); //無法找到 Slave時顯示錯誤訊息
Wait(1000);
Stop(true);
}
}
task main(){
BTCheck (BT_CONN); //檢查與slave之連線
int x1=0;
while(true){
if(ButtonPressed(BTNCENTER, false)){ //按下中間 Enter鈕時送出訊息 3 到Slave
TextOut(5,LCD_LINE1,"Send Slave=3");
SendRemoteBool(BT_CONN, OUTBOX, 3);
}
ReceiveRemoteBool(INBOX, true, x1); //接收Slave信息資料「x1」
if(x1!=0){
ClearScreen();
NumOut(5,LCD_LINE3,x1); //顯示Slave傳送的數值「x1」
Wait(1000);
x1=0;
ClearScreen();
TextOut(5,LCD_LINE1,"Waiting...");
}
}
}
-------------------------------------------------------------------------------------------------------------------
Slave 範例
#define BT_CONN 0 // 對Slave而言 Master 都是連接在 0
#define INBOX 2 //這必須是 Master的OutBox信箱位置
#define OUTBOX 1 //這必須是 Master的InBox信箱位置
sub BTCheck(int conn){
if (!BluetoothStatus(conn)==NO_ERR){
TextOut(5,LCD_LINE2,"BT Error"); //無法找到 Master 時顯示錯誤訊息
Wait(1000);
Stop(true);
}
}
task main(){
BTCheck(BT_CONN);
int x2=0;
while(true){
ReceiveRemoteBool(INBOX, true, x2); //檢查信箱是否有資料「x2」
if(x2!=0){
ClearScreen();
NumOut(5,LCD_LINE3,x2); //顯示資料「x2」
Wait(1000);
x2=0;
ClearScreen();
TextOut(5,LCD_LINE1,"Waiting...");
}
if(ButtonPressed(BTNCENTER, false)){ //按下中間 Enter鈕時送出訊息 6 到Master
TextOut(5,LCD_LINE1,"Send Master=6");
SendResponseBool(OUTBOX,6); //Slave回應主機要用SendRespone
}
}
}
沒有留言:
張貼留言