用c ++读取串行数据

时间:2017-05-06 13:36:16

标签: c++ arduino serial-port

我是编程的初学者,我必须在预先存在的程序(用于项目)中用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中的程序运行得很好,我编译它并通过“系统”调用二进制文件,它也有效。以下是解释的链接: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:”){int requestedDensity = / 这是我的问题 /;} 在我的计算机缓冲区中,我会收到所有类型的数据,例如“问温度9:25 /湿度:74 / dR:80 /门1打开”,我想在“dR:”之后开始阅读并在“之前停止” /“。 我的病情会起作用吗?程序会在dR之后开始读取吗?

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

1 个答案:

答案 0 :(得分: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收到的消息,并且它正在工作。由于我的项目的“演示”截止日期已经达到,我不得不做我所拥有的^^太糟糕的阅读,但我设法没有它。我希望我有更多时间为我的下一个项目做研究......