我正在C++编写程序,并且需要通过USB与Arduino进行通信。每次Arduino重新启动时,Arduino端口都可能连接到更改(例如,位于/dev/ttyAMC0
,Arduino重新启动,连接到/dev/ttyAMC1
)。
我正在使用的代码是
#include <fcntl.h>
...
arduino = open("/dev/ttyAMC0", O_RDWR | O_NOCTTY | O_NDELAY);
if(arduino != -1)
fcntl(_arduino, F_SETFL, 0);
...
每次Arduino更改端口位置时,我都必须在我的代码中手动更改它,然后重新编译我的程序。
有没有办法确定Arduino连接到哪个端口,并将该位置作为字符串返回给我(即&#34; / dev / ttyACM1&#34;)?
答案 0 :(得分:1)
怎么样:
/dev/ttyACM0
/dev/ttyACM0
这样的事情:
#define SERIALIDX_MIN 0
#define SERIALIDX_MAX 1
int idxSerialPortIndex = SERIALIDX_MIN;
char strSerialPort[oxFF];
while (true) {
sprintf(strSerialPort, "/dev/ttyAMC%d", idxSerialPortIndex);
arduino = open("/dev/ttyAMC0", O_RDWR | O_NOCTTY | O_NDELAY);
if(arduino != -1) {
fcntl(_arduino, F_SETFL, 0);
... // read serial port here
}
if (++idxSerialPortIndex > SERIALIDX_MAX)
idxSerialPortIndex = SERIALIDX_MIN;
}
如果您担心其他设备会出现在/dev/ttyACM0
和/dev/ttyACM1
上,您可以让Arduino响应简单的命令字符串。如果它读取ID
后跟LF(或CR / LF取决于你的系统),它可以用一些合适的字符串来响应,如**I AM THE MOTHERBUSTING ARDUINO**
,那么你的C / C ++程序将知道它是否确实连接到一个Arduino。如果没有收到预期的响应,则C / C ++程序可以打开下一个串口。