четверг, 13 февраля 2014 г.

JAVA объединяет NXT и EV3 блоки!

К вчерашней статье про передачу сообщений по WiFi между NXT и EV3 блоками был добавлен комментарий, в котором спрашивалось как обеспечить соединение этих двух платформ по BlueTooth.

Действительно, на стандартной прошивке и стандартными средствами (EV3-G) программирования это не достигнуть.
И такое возможно только с использованием LeJOS прошивки как на NXT, так и на EV3, и соответственно программирования на языке Java.

Например, следующий код, запущенный на EV3 позволит ему выполнять команды на NXT блоке.

//Подключиться к NXT блоку с именем NXT2
RemoteNXT nxt = new RemoteNXT("NXT2", Bluetooth.getNXTCommConnector());
//Вывести на экран EV3 блока имя подключенного NXT блока
System.out.println(nxt.getName());
//Воспроизвести тон частотой 1000 на NXT блоке
nxt.getAudio().playTone(1000, 1000);

Другой пример позволяет осуществлять простейшую передачу данных из EV3 на NXT (при условии, что на NXT запущена программа NXTReceive, входящая в комплект примеров программ для LeJOS/NXJ):
//Подключение к NXT блоку с указанным именем (NXT2)
final String NXT = "NXT2";
NXTCommConnector connector = Bluetooth.getNXTCommConnector();   
System.out.println("Connecting to " + NXT);
NXTConnection connection = connector.connect(NXT, NXTConnection.PACKET);
if (connection == null) {
    System.err.println("Failed to connect");
    return;
}
System.out.println("Connected");
 
//Создание входного и выходного потоков данных перед организацией передачи данных
DataInputStream input = connection.openDataInputStream();
DataOutputStream output = connection.openDataOutputStream();
 
System.out.println("Sending data");
 
//Передача данных
for(int i=0;i<100;i++) {
    //Послать число по каналу данных
    output.writeInt(i);
    output.flush();
    //Принять число из канала данных
    System.out.println("Read: " + input.readInt());
}
 
System.out.println("All data sent");
 
//Закрыть все каналы данных и разорвать соединение с NXT блоком
output.close();
input.close();
connection.close(); 
 
System.out.println("Connection closed");

Очень похожим способом можно осуществить передачу данных от NXT к EV3. NXTСonnect из набора стандартных LeJOS-программ для NXT должен быть запущен на блоке. Тогда на EV3 стороне должен быть запущен следующий код:
//Соединение с NXT блоком
NXTCommConnector connector = Bluetooth.getNXTCommConnector();
System.out.println("Waiting for connection ...");
NXTConnection con = connector.waitForConnection(0, NXTConnection.RAW);
System.out.println("Connected");
 
//Создание потоков данных
DataInputStream dis = con.openDataInputStream();
DataOutputStream dos = con.openDataOutputStream();
 
//Читать данные побайтово из входного потока и сразу же их направлять во входной поток.
while(true) {
    int n;
    try {
        n = dis.readInt();
    } catch (EOFException e) {
        break;
    }
    System.out.println("Read " + n);
    dos.writeInt(-n);
    dos.flush();
}
 
Delay.msDelay(1000);
 
dis.close();
dos.close();
con.close();

Все примеры взяты с основного сайта проекта:
"Remote access to a NXT"
и
"Remote access from a NXT"

Вперед к изучению нового языка программирования!

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

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

Related Posts Plugin for WordPress, Blogger...