Я пытаюсь использовать C++ для связи с кирпичом LEGO Mindstorms EV3. Я клонировал репозиторий ev3sources, что позволяет мне делать это через Bluetooth - например, запускать подключенный двигатель к порту А мы можем сделать это:
#include <unistd.h>
#include <fcntl.h>
#include "ev3sources/lms2012/c_com/source/c_com.h"
int main()
{
// start motor on port A at speed 20
unsigned const char start_motor[] {12, 0, 0, 0,
DIRECT_COMMAND_NO_REPLY,
0, 0,
opOUTPUT_POWER, LC0(0), LC0(0x01), LC0(20),
opOUTPUT_START, LC0(0), LC0(0x01)};
// send above command to EV3 via Bluetooth
int bt = open("/dev/tty.EV3-SerialPort", O_WRONLY);
write(bt, start_motor, 14);
close(bt);
}
Но как мне получить данные из блока EV3? Например, предположим, что я хочу прочитать данные, полученные любым датчиком, подключенным к порту 1. На основе примеры репо Я знаю, что мне нужно что-то вроде этого:
#include <unistd.h>
#include <fcntl.h>
#include "ev3sources/lms2012/c_com/source/c_com.h"
int main()
{
// read sensor on port 1
unsigned const char read_sensor[] {11, 0, 0, 0,
DIRECT_COMMAND_REPLY,
0, 0,
opINPUT_READ, LC0(0), LC0(0), LC0(0), LC0(0), GV0(0)};
// send above command to EV3 via Bluetooth
int bt = open("/dev/tty.EV3-SerialPort", O_WRONLY);
write(bt, read_sensor, 13);
close(bt);
}
Но чего-то не хватает - приведенный выше фрагмент не возвращает никаких ошибок, но я не знаю, где находятся данные датчика. Итак, как мне его получить? Я предполагаю, что он также отправляется обратно через Bluetooth, но как мне это зафиксировать?
(OS X 10.9.3, Xcode 5.1.1, EV3 [31313])