【问题标题】:Reading serial data in c++在 C++ 中读取串行数据
【发布时间】:2017-05-06 13:36:16
【问题描述】:

我是编程初学者,我必须在一个预先存在的程序中(针对一个项目)用 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 上运行 重新编辑:

我在 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 (readings); ,它会在读取不可转换的内容时立即停止读取吗?它会在“/”处停止而没有任何错误吗? (不幸的是,我的项目时间不多了,所以我真的负担不起尝试我找到的每一个答案......)

【问题讨论】:

  • 我不相信你的写命令有效。我认为它缺少<
  • 我试过了,但它确实有效(我的 Arduino 的 Rx 指示灯闪烁,编译没有错误,..)。知道如何读取数据吗?
  • @Bernard LED 闪烁是因为它正在发送错误消息,可能是“/dev/ttyACM0: Permission denied”,因为您尝试执行它并且它没有执行权限(我希望如此)。
  • «我希望» 为什么会这样?我更改了权限,在 tty 和拨出上添加了用户名,我不确定你说的是不是这个?我将尽快检查在 arduino 上收到的消息的性质......我在我认为值得信赖的人的建议下做了这些事情。 (不是我一个人)
  • @Bernard 因为执行终端是无意义的,所以你不应该有执行终端的权限。但这就是你的代码试图做的。 (阅读system 的文档,他们说它“执行指定的命令”。你指定了什么命令?)

标签: c++ arduino serial-port


【解决方案1】:

经过研究和思考,我决定不在我的程序中使用串行读数,而只是将数据发送到 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 收到的消息,并且它正在工作。由于我的项目的“演示”截止日期已经到了,我不得不处理我所拥有的 ^^ 对阅读来说太糟糕了,但我设法没有它。我希望我能有更多的时间为我的下一个项目做研究......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 2018-03-17
    • 1970-01-01
    • 2014-02-28
    相关资源
    最近更新 更多