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/ttyACM1Arduino を単純なコマンド文字列に応答させることができます。IDLF (またはシステムによっては CR/LF) が続く場合は、 のような適切な文字列で応答できます。これにより**I AM THE MOTHERBUSTING ARDUINO**、C/C++ プログラムは、実際に Arduino に接続されているかどうかを認識します。予期した応答が受信されない場合、C/C++ プログラムは次のシリアル ポートを開くことができます。

于 2013-03-24T05:40:39.800 に答える