在一群機器人中,發出訊息控制其他人的人,我們稱為master(主人),其他的都叫slave(僕人)。一台master透過line 1、2、3可連接最多三台slave,而從slave來看,master 都是連接在line 0。我們在每一個line最多可以使用10個信箱(mailbox)來接收訊息,而一個mailbox可以存1個訊息。
今天要使用的是SendRemoteBool與ReceiveRemoteBool指令。SendRemoteBool的三個參數分別是slave的位置、信箱與要傳的boolean值(1或0),而ReceiveRemoteBool的三個參數則是要查看的信箱、
接收完畢後是否把暫存區資料清除與將接收的的值存入的變數名稱。
以下程式是一組master與slave。按下master上的觸碰感應器後,slave就會發出聲音:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
//master 請將觸碰感應器接在1號輸入端 #define BT_CONN 1 //預設連線的line為1 #define OUTBOX 5 //預設mailbox為5 sub BTCheck (int conn) { if (!BluetoothStatus(conn)==NO_ERR) { TextOut(5,LCD_LINE2,"Error");//顯示連線錯誤訊息 Wait(1000); Stop(true); }//if }//BTCheck task main() { BTCheck (BT_CONN); //檢查與slave之連線 SetSensorTouch(S1); bool pressed; while(true) { pressed = Sensor(S1); if(Sensor(S1)==1) { SendRemoteBool(BT_CONN, OUTBOX, pressed); PlayTone(440,500); Wait(500); }//if }//while }//main |
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
//slave #define INBOX 5 sub BTCheck(int conn) { if (!BluetoothStatus(conn)==NO_ERR) { TextOut(5,LCD_LINE2,"Error"); //顯示連線錯誤訊息 Wait(1000); Stop(true); }//if }//BTCheck task main() { BTCheck(0); // 從slave來看,master都是連接在line 0 bool bval; while(true) { ReceiveRemoteBool(INBOX, true, bval); if(bval==1) { Wait(300); PlayTone(660,500); }//if }//while }//main |
有任何疑問或建議歡迎提出討論!另外以上內容摘錄自CAVE的書:NXT與NXC 第二版 "機器人對話"
謝謝老師的分享,可以幫助很多人喔!
『每一個line最多可以使用10個信箱(mailbox)來接收訊息』
請問一下:如果是Master對三台Slave, 總共只有10個信箱,還是有三十個信箱呢?
謝謝!
[版主回覆04/18/2010 00:05:31]邱老師您好:
應該是說,每個NXT都有10個信箱(mailbox) 可以用來傳送與接收訊息
所以如果是Master對三台Slave的話,Master在傳值時,有三個line可以選擇,而每個line有十個信箱可以用,總共三十個信箱。
希望這樣有解答您的疑問喔!