我有一个BotBoarduino(一个带有一些附加功能的 Duemilanove),我正在尝试使用 Perl 脚本与之通信。如果我从 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_active
,rts_active
和handshake
位。我玩弄了这些设置,因为它们在某处被提及为可能的罪魁祸首。
另外,我使用了一个 120 欧姆的电阻来阻止 Arduino 自动重置,如此处所述。
有没有人对让 Arduino 收听我的 Perl 程序而无需先打开 PuTTY/Serial Monitor 所需的设置有任何建议?