gpt4 book ai didi

c - 读取串口数据

转载 作者:行者123 更新时间:2023-11-30 17:42:53 24 4
gpt4 key购买 nike

我正在尝试在Mac OS上用C读取串口数据。串行端口的配置在单独的 Arduino IDE 中完成。

我能够读取部分数据,但随后打印的数据会重复自身并开始读取零,如下所示。如果我删除 O_NONBLOCK,程序就会挂起。我可以做什么来解决这个问题?其次,假设我在for循环中读取数据,如何确保读取速率与波特率相对应?

查看数据:296 310 0

320295311

320295311

9 296 311

320295311

320295311

9 296 311

...

0 0 0

0 0 0

0 0 0等等

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>

int buffer[300];

int main(int argc, const char* argv[])
{

// open serial port
int port;
port = open("/dev/tty.usbmodem1411", O_RDONLY | O_NONBLOCK);
if (port == -1)
{
printf("Unable to open serial port.\n");
return 1;
}

// instantiate file
FILE* file = fdopen(port, "r");
if (file == NULL)
{
printf("Unable to instantiate file.\n");
close(port);
return 2;
}

for (int j = 0; j < 200; j++)
{

fscanf(file, "%d %d %d", &buffer[3*i], &buffer[3*i+1], &buffer[3*i+2]);
printf("%d %d %d\n", buffer[3*i], buffer[3*i+1], buffer[3*i+2]);

i = (i + 1) % 100;

usleep(10000);

}

fclose(file);
close(port);

return 0;

}

最佳答案

克里斯·斯特拉顿:

if (fgets(temp, sizeof(temp), file) != NULL) 
{
sscanf(temp, "%d %d %d\n", &buffer[3*i], &buffer[3*i+1], &buffer[3*i+2]);
printf("%d %d %d\n", buffer[3*i], buffer[3*i+1], buffer[3*i+2]);
}

但是,回到我原来的问题,即使我使用 fscanf 和 printf,我也会获取数据,然后我只会无限期地读取零。我认为这可能更多是串行端口通信问题?

关于c - 读取串口数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20383780/

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