2

我正在用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”)?

4

1 回答 1

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++ 程序可以打开下一个串行端口。

于 2013-03-24T05:40:39.800 回答