2

Odroid-U2 で C++ コードからサーボを制御しようとしています。LynxMotion の SSC-32 サーボ ドライバーを、Usb-シリアル コードを使用して Odroid に接続しています。

「#n Puuu」の後にキャリッジ リターンを続けるなど、単純なシリアル コマンドでサーボを制御します。ここで、n はサーボのピン番号、uuu はパルス幅です。Odroid から PUTTY を使用するとサーボをうまく制御できますが、C++ コードを使用してサーボを制御すると問題が発生します。たとえば、私のコードでは次のようにします。

fstream f;
f.open("/dev/ttyUSB0");
f << "#0 P600\r";
f.close();

かつて、このコードを実行することができ、サーボを適切に小刻みに動かしていましたが、現在、このコードを実行しようとすると端末がスタックしてハングします。問題を f.open("/dev/ttyUSB0") 行に絞り込み、コードの実行を妨げています。USBポートを何らかの方法で設定する必要があると思います。私は 115200 のボーレートが必要であることを知っており、それに応じて設定しましたが、Ubuntu n00b のようなものなので、他にどのような構成が必要かわかりません。

私の Linux のバージョンは Linaro 12.11 です。

stty と入力すると、デフォルト以外の構成セットは次のようになります。

speed 115200 baud; line = 0;
-brkint ixoff -imaxbel
-iexten
4

1 に答える 1

1

シリアルポートのデフォルト設定に依存することはできません (また、stty を使用してプログラムの外で設定しようとしないでください)。シリアル ポートを適切に設定するコードをプログラムに記述する必要があります。これには、tcsetattr/tcgetattr、cfsetspeed などの関数を使用する必要があります。man termios を参照してください。

また、fstream は、使用する適切な open() 関数パラメーターへのアクセスを提供しない場合があります。UNIX でシリアル ポートを開くには O_NOCTTY フラグを使用する必要があるためです。

于 2013-10-01T18:24:16.273 に答える