[教學] NXT Bluetooth – 傳/收值範例

在一群機器人中發出訊息控制其他人的人,我們稱為master(主人)其他的都叫slave(僕人)。一台master透過line 123可連接最多slave,而slave來看,master 都是連接在line 0。我們在每一個line最多可以使用10個信箱(mailbox)來接收訊息,而一個mailbox可以存1個訊息

今天要使用的是SendRemoteBool與ReceiveRemoteBool指令SendRemoteBool的三個參數分別是slave的位置、信箱與要傳的boolean值(1或0),而ReceiveRemoteBool的三個參數則是要查看的信箱、

接收完畢後是否把暫存區資料清除與將接收的的值存入的變數名稱。


以下程式是一組
masterslave。按下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 第二版 "機器人對話"

One thought on “[教學] NXT Bluetooth – 傳/收值範例

  1. 探奇自然科學教室 says:

    謝謝老師的分享,可以幫助很多人喔!

    『每一個line最多可以使用10個信箱(mailbox)來接收訊息』

    請問一下:如果是Master對三台Slave, 總共只有10個信箱,還是有三十個信箱呢?

    謝謝!

    [版主回覆04/18/2010 00:05:31]邱老師您好:

    應該是說,每個NXT都有10個信箱(mailbox) 可以用來傳送與接收訊息

    所以如果是Master對三台Slave的話,Master在傳值時,有三個line可以選擇,而每個line有十個信箱可以用,總共三十個信箱。

    希望這樣有解答您的疑問喔!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *