К вчерашней статье про передачу сообщений по WiFi между NXT и EV3 блоками был добавлен комментарий, в котором спрашивалось как обеспечить соединение этих двух платформ по BlueTooth. Действительно, на стандартной прошивке и стандартными средствами (EV3-G) программирования это не достигнуть. |
Например, следующий код, запущенный на 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"
Вперед к изучению нового языка программирования!
Комментариев нет:
Отправить комментарий