使用C / C ++在Ubuntu中找到哪个TTY端口Arduino连接到

时间:2013-02-24 06:25:16

标签: c++ ubuntu serial-port arduino

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

1 个答案:

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