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

标签 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 连接到哪个端口,并将位置作为字符串(即“/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/

相关文章:

c++ - 我如何在 C++ 中调用抽象基类的函数?

linux - 如何在 linux 中列出目录中文件夹的完整路径?

c++ - 在 Ubuntu 中定位 Boost 库

c - linux - 串口编程(ASCII 转字节)

c++ - 是否可以选择在 Qt 中第二次运行同一个程序?

c++ - 为什么从 DLL 中调用类方法需要虚拟说明符?

c++ - 在 makefile 中创建一个库文件,然后编译

docker - 重新启动ubuntu后无法访问本地主机中的站点

arduino - SIM800c - 禁用 "OVER-VOLTAGE WARNNING"未经请求的消息

java - 如何使用带有 GSM 调制解调器 Java 的 Java Communication Api 接听电话