gpt4 book ai didi

c++ - 使用 C++ 从乐高 EV3 传感器获取数据?

转载 作者:太空宇宙 更新时间:2023-11-04 11:32:21 24 4
gpt4 key购买 nike

我正在尝试使用 C++ 与 LEGO Mindstorms EV3 积木进行通信。我克隆了 ev3sources repo ,这让我可以通过蓝牙来做到这一点——例如,要启动连接到端口 A 的电机,我们可以这样做:

#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 程序 block 取回数据?例如,假设我想读取连接到端口 1 的任何传感器捕获的数据。基于 the repo examples我知道我需要看起来有点像这样的东西:

#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);
}

但缺少一些东西 - 上面的代码片段没有返回任何错误,但我不知道传感器数据在哪里。那么,我该如何取回它呢?我想它也会通过蓝牙发回,但我该如何捕获它?

(OS X 10.9.3、Xcode 5.1.1、EV3 [31313])

最佳答案

写完需要从bt读取。与您要发送的数据一样,前两个字节是大小,因此请先读取 2 个字节并使用它来计算您还需要读取多少字节。

#define MAX_READ_SIZE 255
unsigned char read_data[MAX_READ_SIZE];
int read_data_size;

// existing code
// ...
write(bt, read_sensor, 13);
read(bt, read_data, 2);
read_size = read_data[0] + read_data[1] << 8;
read(bt, read_data, read_size);
close(bt);
// decode the data
// ...

编辑:根据评论完成代码

#include <unistd.h>
#include <fcntl.h>
#include "ev3sources/lms2012/c_com/source/c_com.h"

#define MAX_READ_SIZE 255

int main()
{
unsigned char read_data[MAX_READ_SIZE];
int read_data_size;

// read sensor on port 1
unsigned const char read_sensor[] {11, 0, 0, 0,
DIRECT_COMMAND_REPLY,
1, 0, // 1 global variable
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_RDWR);
write(bt, read_sensor, 13);
read(bt, read_data, 2);
read_size = read_data[0] + read_data[1] << 8;
read(bt, read_data, read_size);
close(bt);
// TODO: check that command was successful and so something with data
}

关于c++ - 使用 C++ 从乐高 EV3 传感器获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24253509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com