c - 如何使用C语言从Arduino板读取数据到PC?

标签 c arduino serial-port usb

我在这里找到了将数据写入 Arduino 板的教程:https://salilkapur.wordpress.com/2013/03/08/communicating-with-arduino-using-c/

代码使用file = fopen("/dev/ttyUSB0","w+");打开端口进行读/写操作,并使用fprintf将数据写入设备。但是当我尝试使用fscanf从Arduino检索数据时(我使用Serial.print从Arduino端将数据写回PC,并且数据是格式为 DEC),它不起作用。

我可以使用 Arduino IDE 中的串行监视器查看输出,但无法在 C 程序的输出中查看输出。为什么它不工作?我需要做什么才能让它工作?

该程序在 Ubuntu 中运行。

这是我的 C 代码,应该在 PC 上运行:

#include <stdio.h>


int main()
{
    FILE *file;
    char a=0;
    file = fopen("/dev/ttyUSB0","w+");  
    int i = 0;
    if(file == -1)
        printf("error");
    for(i = 0 ; i < 3 ; i++)
    {
        fprintf(file,"C"); 
        fscanf(file, "%c", &a);
        printf("%c", a);
    }



    fclose(file);
 }

我还尝试了一些变体,例如使用 %d 而不是 %c、使用 int 代替 char 以及使用 fflush。我不知道为什么它不起作用。难道是我的Arduino板不工作?

注意:它应该在每个字符输入后给出一个输出。

最佳答案

您无法读取任何内容的原因是当您调用

file = fopen("/dev/ttyUSB0","w+");

the arduino is reset ,开机需要1-2秒。由于某种原因,读取无限期地挂起。

fopen 旁边添加 sleep(2); 可能会达到目的。

查看如何disable auto reset

关于c - 如何使用C语言从Arduino板读取数据到PC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36571268/

相关文章:

c - Arduino AES128加密-解密问题

Arduino - 解析 GET 字符串

c++ - 微:Bit Serial read

serial-port - 当我从西门子 TC35 GSM 模块和 Arduino 读取短信时,短信被截断

c - 当我定义数组时真正发生了什么

c - 用 8 位表示 2 个数字

c - 如何在 Linux 内核 v3.2 中创建一个简单的 sysfs 类属性

c - "inline"什么时候失效? (在 C 中)

c - 从二维数组中提取一维数组

c - C中的串行通信