【发布时间】: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