0

Perl スクリプトを使用して通信しようとしているBotBoarduino (いくつかのエクストラを備えた Duemilanove) があります。Arduino IDE からシリアル モニタを開くと、問題なくデータを送受信できます。これに続いて、私の Perl スクリプトは問題なく通信できます。ただし、Arduino が切断されて PC に再接続された場合、シリアル モニターが再度開かれるまで、Arduino は Perl スクリプトから送信されたコマンドをリッスンしていないようです。

また、PuTTY を使用して Arduino と通信しようとしましたが、これは Arduino IDE のシリアル モニターと同じように機能します。接続が一度開かれるまで、Arduino は Perl スクリプトをリッスンしません。

Perl を使用して Arduino と通信する方法のサンプルを次に示します。

#!perl -w

use Win32::SerialPort;

my $PortName = "COM4";
my $sendData = "c";

### SERIAL PORT SETUP ###
my $PortObj = new Win32::SerialPort($PortName) or die "Can't open $PortName: $^E\n";
$PortObj->baudrate(115200);
$PortObj->parity("none");
$PortObj->databits(8);
$PortObj->stopbits(1);
#$PortObj->dtr_active(1);
#$PortObj->rts_active(0);
#$PortObj->handshake("xoff");

$PortObj->lookclear();
$PortObj->write($sendData);

$PortObj->close();

dtr_activerts_activeおよびhandshakeビットをコメントアウトしました。これらの設定は、どこかで犯人の可能性があると言及されていたので、いじってみました。

また、ここで説明されているように、120 オームの抵抗を使用して Arduino の自動リセットを停止しました。

最初に PuTTY/Serial Monitor を開かなくても、Arduino に Perl プログラムをリッスンさせるために必要な設定について、誰か提案はありますか?

4

1 に答える 1

1

Arduino Forumのスレッドで説明されているように、シリアル ポートの設定を保存していなかったことが判明しました。$PortObj->write_settings();シリアルポートのパラメーターを設定した後に追加すると、問題が解決しました。最終的に機能した Perl コードは次のとおりです。

#!perl -w

use Win32::SerialPort;
use strict;
use warnings;

$| = 1; #enable autoflush

my $PortName = "COM4";
my $sendData = "o";

### SERIAL PORT SETUP ###
my $PortObj = new Win32::SerialPort($PortName) or die "Can't open $PortName: $^E\n";
$PortObj->baudrate(57600);
$PortObj->parity("none");
$PortObj->databits(8);
$PortObj->stopbits(1);
$PortObj->write_settings(); #very important!

$PortObj->write($sendData);

$PortObj->close() || warn "\nClose failed\n";
于 2013-01-18T08:35:03.707 に答える