当前位置: 首页 > 知识库问答 >
问题:

在串行监视器打开之前,Arduino不会监听通过虚拟串行端口发送的数据

秦昊穹
2023-03-14

我有一个BotBoarduino(一个带有一些额外功能的Duemilanove),我试图使用Perl脚本与之通信。如果我从Arduino IDE打开串行监控器,我可以毫无问题地发送和接收数据。在此之后,我的Perl脚本可以毫无问题地进行通信。但是,如果Arduino断开连接,然后重新连接到PC,则Arduino似乎不会监听从我的Perl脚本发送的命令,直到再次打开Serial Monitor。

我还尝试使用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握手位。我玩弄这些设置,因为它们在某个地方被认为是可能的罪魁祸首。

此外,我还使用了一个120欧姆的电阻器来阻止Arduino自动复位,如下所述。

有没有人需要得到Arduino收听我的Perl程序,而不必打开PuTTY/串行监视器第一设置任何建议?

共有1个答案

和斌
2023-03-14

原来我没有保存串口设置,正如Arduino论坛上的一个帖子所描述的那样。添加$PortObj-

#!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";

 类似资料:
  • 我有一个程序可以打印到液晶显示器上,我想知道我是否可以同时将它打印到串行显示器上。 我试过连载。开始,但只是有错误。

  • 我已经用java编写了一段代码来与我的Arduino板通信。它工作得很好。我还可以使用串行监视器与Arduino板通信。 但是,当我试图打开串行监视器时,java程序正在运行(监听连接到电子板的端口,端口32),它没有说, 串行端口“COM 32”已在使用中。尝试退出任何可能正在使用它的程序 这是完整的信息(为了完整起见) 是的,我知道,这是我的java程序,它正在使用端口。但这是否意味着我不能同

  • 我正试图使用串口从C#向Arduino发送一个数组。在C#中,首先是输入字符串 然后,我将其转换为int数组 然后,我将其转换为字节数组,通过串行端口发送 最后,我把它寄出去了 那么,应该由我的Arduino接收 所以recdata应该是一个int数组 但事实并非如此。当我将其打印到另一个串行端口进行检查时。。 我得到3个输出,而不是1个,就好像serialport先发送一个int,然后发送第二个

  • 我从Arduino Uno发送到串行端口的数据可以在Arduino串行监视器中完全按照预期查看,但在我的WAMP环境中通过serproxy从PHP读取数据时,我会得到一些缺失或额外的字符(例如,通常是一个看起来像黑钻石内部的问号的字符)。 我在网上发现了类似的问题,但所有的答案都不够。解决方案通常只针对Linux,或者只是解决了让Windows从串行端口读取(而不是写入)所需的许多挑战的一部分。

  • 我试图让Arduino在串口读取字符“s”时触发一个中继。该字符“s”由python根据从屏幕读取的图像发送。 我的问题是arduino似乎无法从串行端口读取数据,因为它从不执行if条件。我的猜测是这两者之间存在某种死锁(这就是为什么我将ardu.close()放在函数foo中) 这是我的arduino代码: 这是我的python代码:

  • 翻译(我知道这是自我解释,但以防万一):Koneksi=连接,Komunikasi=沟通 从上图中,我看到有一种方法可以调试EPS8266和Arduino Uno的通信,即启用1、2、3和4号dips。但当我尝试时,数据没有发送,这让我想知道问题是否出在EPS8266和Arduino Uno之间的通信上,或者启用的dips编号对于获取打印输出是错误的。有没有办法调试我发送的数据是否被正确接收?(这