我希望有人可以帮助我,我希望通过从执行一些基本面部识别的C ++程序发送命令来控制我的arduino uno。重要的是我发送一串数据
its John;
这样arduino就能正确回应。但是,我正在努力寻找执行此类操作的正确方法。如果有人能指出我正确的方向,我将不胜感激。
作为一个注释我不是在Windows上运行这个程序。它将在覆盆子pi上运行。
答案 0 :(得分:3)
在raspberry pi上,串口是设备/ dev / ttyAMA0。它也可能正在运行一个终端,所以你必须打开/ etc / inittab并注释掉这一行并重启:
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
如果你不这样做,你的arduino会在它向串口发送任何内容时尝试登录你的。
另一个陷阱是如果你想在你的协议中使用二进制数据,默认情况下启用XON / XOFF流控制,它会默默地吃某些字节(^ S和^ Q)。
以下是如何打开,设置串口模式(禁用流量控制!)和波特率,并写入串口:
#include <termios.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <string.h>
// (i may be forgetting some headers)
...
int fd = open("/dev/ttyAMA0", O_RDWR);
if (fd == -1) {
perror("/dev/ttyAMA0");
return 1;
}
struct termios tios;
tcgetattr(fd, &tios);
// disable flow control and all that, and ignore break and parity errors
tios.c_iflag = IGNBRK | IGNPAR;
tios.c_oflag = 0;
tios.c_lflag = 0;
cfsetspeed(&tios, B9600);
tcsetattr(fd, TCSAFLUSH, &tios);
// the serial port has a brief glitch once we turn it on which generates a
// start bit; sleep for 1ms to let it settle
usleep(1000);
// output to serial port
char msg[] = "hi there";
write(fd, msg, strlen(msg));