读取串行输入到C变量

dfty9e19  于 2023-01-29  发布在  其他
关注(0)|答案(2)|浏览(106)

嗨,我正在尝试从C程序中读取串行输入(来自Arduino)。我能够使用以下命令将数据发送到Arduino

system("echo -n \"data\" > /dev/ttyUSB0");

但是我不知道如何从同一个Arduino中获取一个输入到c程序中的一个字符串中(这个字符串将在程序中处理)。

wtzytmuj

wtzytmuj1#

这样的通信调用system是没有意义的,你可以像访问文件一样使用openreadwriteioctlclose函数来访问串口。
只需将/dev/ttyUSB0作为要打开的文件传递给open,只有在需要修改连接设置(如波特率或奇偶校验等)时才需要ioctl
您可以查看http://www.tldp.org/HOWTO/Serial-Programming-HOWTO/index.html以了解详细信息。

6l7fqoea

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

相关问题