在C 中读取序列数据

Reading serial data in c++

本文关键字:数据 读取      更新时间:2023-10-16

我是编程的初学者,我必须在preexisting程序中编写C 插件(对于一个项目(。我将为您提供详细信息,但是我必须与Arduino(USB连接,串行通信(,发送和读取数据进行通信。我已经知道如何写入Arduino设备,但是我不知道如何从Arduino中读取数据?

要将数据发送到Arduino,我只使用它:

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

如果阅读与写作一样简单,我非常喜欢:d

谢谢您的回答

编辑:该程序在Lubuntu和(2个不同的计算机(上运行,Ubuntu 14.10reedit:

我在C中找到了一个可以正常工作的程序,我对其进行了编译,并通过"系统"调用了二进制文件,它也可以工作。这是解释的链接:https://todbot.com/blog/2006/12/06/arduino-serial-serial-c-code-to-tam-talk-talk-took-to-to-to-arduino/

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

if(readings ==" dr:"({int requestedDentys =/这是我的问题/;}在我的计算机的缓冲区中,我会收到所有类型的数据,例如,"问温度9:25/湿度:74/dr:80/door 1开了",我想在" DR:"之后开始阅读,然后停下来,然后在"之前"停下来。/"。我的病情可以工作吗?该程序会在DR之后开始阅读:?

那么,如果这是真的,如果我像int requesteddensity = std :: stoi(readings(一样转换它;,一旦读取不转换的东西,它会停止阅读吗?它会在没有任何错误的情况下停止"/"吗?(不幸的是,我的项目时间没时间,所以我真的负担不起我找到的每个答案...(

研究和反思后,我决定不使用程序中的串行读数,而只是将数据发送到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收到的消息,并且正在奏效。由于我的项目的"演示"截止日期已经到了,因此我必须与我对阅读的糟糕率有关,但是我设法没有它。我希望我将有更多时间为下一个项目进行研究...