我正在 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 连接到哪个端口,并将位置作为字符串(即“/dev/ttyACM1”)返回给我?
最佳答案
怎么样:
- 尝试打开
/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++程序可以打开下一个串口。
关于c++ - 使用 C/C++ 在 Ubuntu 中查找 Arduino 连接到哪个 TTY 端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15049257/