嗨,我正在尝试从C程序中读取串行输入(来自Arduino)。我能够使用以下命令将数据发送到Arduino
system("echo -n \"data\" > /dev/ttyUSB0");
但是我不知道如何从同一个Arduino中获取一个输入到c程序中的一个字符串中(这个字符串将在程序中处理)。
wtzytmuj1#
这样的通信调用system是没有意义的,你可以像访问文件一样使用open,read,write,ioctl和close函数来访问串口。只需将/dev/ttyUSB0作为要打开的文件传递给open,只有在需要修改连接设置(如波特率或奇偶校验等)时才需要ioctl您可以查看http://www.tldp.org/HOWTO/Serial-Programming-HOWTO/index.html以了解详细信息。
open
read
write
ioctl
close
/dev/ttyUSB0
6l7fqoea2#
以波特率230400从/dev/ttyUSB 0阅读255个字节:
#include <stdio.h> #include <unistd.h> #include <termios.h> #include <fcntl.h> #define BAUDRATE B230400 void main() { int fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY); struct termios options; tcgetattr(fd, &options); cfsetispeed(&options, BAUDRATE); cfsetspeed(&options, BAUDRATE); options.c_cflag |= (CLOCAL | CREAD); tcsetattr(fd, TCSANOW, &options); if (fd == -1) printf("Cannot open port /dev/ttyUSB0\n"); char buf[255]; int n = read(fd, buf, sizeof(buf)); printf("%d bytes read\n%s\n", n, buf); }
2条答案
按热度按时间wtzytmuj1#
这样的通信调用system是没有意义的,你可以像访问文件一样使用
open
,read
,write
,ioctl
和close
函数来访问串口。只需将
/dev/ttyUSB0
作为要打开的文件传递给open,只有在需要修改连接设置(如波特率或奇偶校验等)时才需要ioctl您可以查看http://www.tldp.org/HOWTO/Serial-Programming-HOWTO/index.html以了解详细信息。
6l7fqoea2#
以波特率230400从/dev/ttyUSB 0阅读255个字节: