суббота, 24 марта 2012 г.

Особенности организации bluetooth соединения между NXC и NXT-G

В учебном процессе, если группа ребят работает в рамках одного большого проекта, возможна ситуация, когда в эту группу входят ученики разных уровней подготовки. Например, участники начального уровня умеют программировать еще только на NXT-G, а "продвинутые" ребята уже свободно ориентируются в NXC.
В таком случае, если концепция проекта позволяет, разные подгруппы могут работать над разными частями проекта. Одни программируют свою часть на одном блоке на NXT-G, другие на своем блоке на NXC и, затем, все вместе они устанавливают взаимодействие между двумя блоками – для этого подойдет возможность Bluetooth соединения.

В программировании такого уровня взаимодействия нет особенных трудностей – примеры, как организовать общение двух блоков, что на NXT-G, что на NXC, можно быстро найти в Internet.

В NXT-G за это ответственны два блока.


В NXC передачу данных можно осуществить с использований следующих функции симейства SendRemote* и ReceiveRemote*. Например, передача строковых данных программируется с помощью

SendRemoteString(byte conn, byte queue, string str)
ReceiveRemoteString(byte queue, bool clear, string &str)

И в NXT-G, и в NXC необходимо указывать такое значение, как MailBox (в NXC это параметр queue). Номер Mailbox на принимающей стороне должен быть задан такой же, как номер Mailbox на передающей стороне. Но вот в этом как раз и кроется небольшой ньюанс, на выяснение которого можно потратить довольно много времени: в NXT-G номера нумеруются от 1 до 10, в то время как в NXC нумерация идет от 0 до 9. Т.е. если для номера Mailbox по незнанию (или по невнимательноcти) в программах на разных языках задано одно и тоже значение, например, 1. То со стороны будет казаться, что данные не передаются, хотя оба блока успешно видят друг друга. Изменение номера Mailbox (queue) на 0 в NXC решает проблему – данные начинают передаваться.

Чтобы избежать такого рода ошибок, рекомендация – использовать макро-определения в NXС вместо чисел. Эти макро-определения как раз и были введены, чтобы избежать этой путаницы.

MAILBOX1 0
MAILBOX2 1
MAILBOX3 2
MAILBOX4 3
MAILBOX5 4
MAILBOX6 5
MAILBOX7 6
MAILBOX8 7
MAILBOX9 8
MAILBOX10 9

Т.е. вместо использования

SendRemoteString(1, 1, "Hello");

будет

SendRemoteString(1, MAILBOX2, "Hello");

Комментариев нет:

Отправить комментарий

Related Posts Plugin for WordPress, Blogger...