首页 文章

读取c中的串行数据

提问于
浏览
0

我是编程的初学者,我必须在预先存在的程序(用于项目)中用C编写插件 . 我会告诉你细节,但我必须与Arduino(USB连接,串行通信),发送和读取数据进行通信 . 我已经知道如何写入Arduino设备,但我不知道如何从Arduino读取数据?

要将数据发送到arduino,我只需使用:

string device ("/dev/ttyACM0 ");
string cmd ("Threshold reached");
system ( (device + cmd).c_str () );

如果阅读和写作一样简单,我非常希望:D

谢谢您的回答

编辑:该程序在lUbuntu和(2台不同的计算机)上运行Ubuntu 14.10 Reedit:

我发现c中的程序工作正常,我编译它并调用二进制文件谢谢"system",它也有效 . 以下是解释的链接:https://todbot.com/blog/2006/12/06/arduino-serial-c-code-to-talk-to-arduino/

我现在知道如何读写,只剩下一个问题:识别我感兴趣的数据 . 到目前为止我已经得到:字符串读数=系统(./arduino-serial -b 9600 -p / dev / ttyACM0 - r); (这是准确的吗?我能把它放在变量中吗?)

if(readings == "dR:")在我的计算机's buffer, I'将收到所有类型的数据,例如,"Asked Temperature 9 : 25 / Humidity : 74 / dR: 80/door 1 opened"并且我想在"dR:"之后开始阅读并在" / "之前停止 . 我的病情会起作用吗?程序会在dR之后开始读取吗?

然后,如果那是真的,如果我转换它就像int requestedDensity = std :: stoi(读数); ,一旦看到不可转换的东西,它会立即停止阅读吗?它会在没有任何错误的情况下停在“/”吗? (不幸的是,我的项目时间已经没时间了,所以我找不到能找到我发现的每个答案......)

1 回答

  • 0

    经过研究和反思,我决定不在我的程序中使用序列读数,而只是将数据发送到Arduino并让它处理 . 所以,没有进一步的解释,这是我的(简单)代码:

    //communication des infos avec l'arduino
    
    char buffer [50];               //chaîne stockée dans buffer
    int n;
    n = sprintf (buffer, "%d", densityLevel);       // n est le nombre de carac
    std::cout << "Density level : "<< buffer<<endl;
    
    string lvl = buffer;
    string cmd = "c_dL:" + lvl;                      //concaténation
    system((string ("./arduino-serial -b 9600 -p /dev/ttyACM0 -s "+ cmd)).c_str());//envoi de l'info par arduino-serial (qui doit être dans le dossier du bin useTracker)
    

    所以我尝试了,并验证了arduino收到了什么消息,并且它正在工作 . 由于我的项目的“演示”截止日期已经达到,我不得不做我所拥有的^^太糟糕的阅读,但我设法没有它 . 我希望我有更多时间为我的下一个项目做研究......

相关问题