2

Perlで、LinuxでSerial :: Deviceをファイルとして開くと、Arduinoがリセットされますが、リセットしたくありません。ArduinoはDTRをパルスすることでリセットできるため、シリアルデバイスを開くにはデフォルトでDTRをパルスする必要があります。

私の質問は:Arduinoがリセットされる(DTRがパルス化される)のを防ぐにはどうすればよいですか?

この最小限のコードは私のArduinoをリセットします:

use Device::SerialPort;
use Symbol qw( gensym );
my $handle = gensym();
my $PortName = '/dev/ttyUSB1';
my $PortObj = tie( *$handle , "Device::SerialPort" , $PortName ) or die "Cannot open serial port: $!\n";
# At this point the Arduino is being reset.

メソッドを使用してデバイスを開くだけで実行できることはわかっていPortObj = new Device::SerialPort ($PortName, $quiet, $lockfile);ますが、シリアルバッファーで待機中のデータがあるかどうかを確認できないため、そのメソッドを使用できません。そして、データ待機のテストは私のプログラムの難しい要件です。

4

1 に答える 1

2

ポートの termios 設定で HUPCL ビットを変更する必要があります。これは、他の何かが変更されるまで持続します (同じディストリビューションの異なるバージョンのデフォルトが異なるのを見てきました)。

man termios と man stty を参照してください。

次のシェル コマンドは動作する可能性があります - テストされていません:

stty -F /dev/ttyUSB1 -hupcl
于 2012-04-28T15:56:32.857 に答える