在c+中读取串行数据+; 我是编程新手,我必须在C++中在一个预先存在的程序(项目中)写一个插件。我不会告诉你细节,但我必须与Arduino(USB连接,串行通信)通信,发送和读取数据。我已经知道如何写入Arduino设备,但我不知道如何从Arduino读取数据
要向arduino发送数据,我只需使用:在c+中读取串行数据+; 我是编程新手,我必须在C++中在一个预先存在的程序(项目中)写一个插件。我不会告诉你细节,但我必须与Arduino(USB连接,串行通信)通信,发送和读取数据。我已经知道如何写入Arduino设备,但我不知道如何从Arduino读取数据,c++,arduino,serial-port,C++,Arduino,Serial Port,要向arduino发送数据,我只需使用: string device ("/dev/ttyACM0 "); string cmd ("Threshold reached"); system ( (device + cmd).c_str () ); 我非常希望阅读和写作一样简单:D 谢谢你的回答 编辑:该程序在lUbuntu和(2台不同的计算机)Ubuntu 14.10上运行 重新编辑: 我发现一个c语言的程序运行得很好,我编译它并调用二进制代码,多亏了“system”,它也可以运行。以下是解释
string device ("/dev/ttyACM0 ");
string cmd ("Threshold reached");
system ( (device + cmd).c_str () );
我非常希望阅读和写作一样简单:D
谢谢你的回答
编辑:该程序在lUbuntu和(2台不同的计算机)Ubuntu 14.10上运行
重新编辑:
我发现一个c语言的程序运行得很好,我编译它并调用二进制代码,多亏了“system”,它也可以运行。以下是解释的链接:
我现在知道如何读写了,只剩下一个问题:识别我感兴趣的数据。
到目前为止,我得到了:字符串读数=系统(./arduino serial-b9600-p/dev/ttyACM0-r);(这准确吗?我能把它放在变量中吗?)
如果(读数==“dR:”){int requestedDensity=/这是我的问题/;}
在我的计算机的缓冲区中,我将接收所有类型的数据,如“询问温度9:25/湿度74/dR:80/门1打开”,我想在“dR:”之后开始读取,在“/”之前停止。
我的条件行吗?程序会在dR:之后立即开始读取吗
然后,如果这是真的,如果我把它转换成int requestedDensity=std::stoi(readings),一旦读到不可转换的内容,它会停止阅读吗?它是否会在“/”处停止而没有任何错误?(不幸的是,我的项目没有时间了,所以我真的无法尝试我找到的每一个答案……经过研究和思考,我决定不在我的程序中使用序列读数,而只是将数据发送到Arduino并让它处理。因此,无需进一步解释,以下是我的(简单)代码:
//信息通信系统avec l'arduino
字符缓冲区[50]//查恩·斯托克缓冲区
int n;
n=sprintf(缓冲区,“%d”,密度等级);//这是卡拉克的名字
难道我不相信你的write命令有效吗。我想它缺少了一个,我试过了,但还是成功了(我的Arduino的Rx指示灯闪烁,编译没有错误,…)。知道如何读取数据吗?@Bernard LED闪烁,因为它发送了一条错误消息,可能是“/dev/ttyACM0:Permission denied”,因为您试图执行它,但它没有执行权限(我希望)。«我希望»为什么?我更改了权限,在tty上添加了用户名并拨出,我不确定这是不是你说的?我会尽快检查arduino上收到的消息的性质。。。我是在我认为值得信任的人的建议下做这些事情的。(不是我自己)@Bernard因为执行终端是荒谬的,所以你不应该有执行终端的权限。但这正是你的代码要做的。(阅读系统的文档,他们说它“执行指定的命令”。您指定了什么命令?)
//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)