工程筆記本 / NXC/RobotC/C++ for Lego robot

NXC/RobotC/C++ for Lego robot

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

CAVEDU 阿吉 - 雜工📅 2010-04-16👁 59
在一群機器人中發出訊息控制其他人的人,我們稱為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 第二版 "機器人對話"

相關文章 📎

留言 💬 (0)

還沒有留言,來當第一個。