0

嗨,我的小脚本使用Device::SerialPort. 我的代码如下:

use Device::SerialPort;
my $port = new Device::SerialPort("/dev/ttyACM0") or croak("no.... $!");
$port->baudrate(9600) || die "failed setting baudrate: $!";
$port->parity("none") || die "failed setting parity: $!";
$port->databits(8)    || die "failed setting databits: $! ";
$port->stopbits(1) or die "failed setting stops: $!";
$port->handshake("none") || die "failed setting handshake: $!";
$port->write_settings or croak("Failed setting... everything: $!");
my $foo = $port->write("o0") or croak("Failed writing: $!");
die("WRITE FAILED!\n") unless $foo;
die("WRITE INCOMPLETE!\n") if $foo != 2;

$port->close() or die("close.... $!");

奇怪的是,如果我cat /dev/ttyACM在运行 perl 代码之前这样做,一切都会按预期工作。

我曾尝试open($fh, '<', '/dev/ttyACM0');像应该做的那样添加打开端口cat,但可惜,没有运气。

我究竟做错了什么?

更新:好的..有些奇怪。如果我将串行端口设置为 9600stty -F /dev/ttyACM0 raw speed 9600并尝试echo o0 > /dev/ttyACM0它不起作用。但是,如果我cat /dev/ttyACM0在做回声时这样做,它就可以正常工作。

另一端的设备是 Arduino Mega,如果这与此有关..

cat > /dev/ttyACM0适用于各种情况,但不完全是我想要的,因为 cat 永远不会退出。

4

2 回答 2

0

“不起作用”是什么意思?写入挂起,还是数据消失?

我怀疑您正在与某些流量控制设置发生冲突。我对 Arduino 并不特别熟悉,但如果它支持硬件流控制,那么您可能会摆弄这些设置。

于 2013-06-24T21:18:57.677 回答
-1

添加<使文件句柄读取,而您可能希望它用于写入。因此,您需要打开它以进行 write>或 append >>。此外,由于操作系统缓存文件缓冲区,因此您必须刷新它。请参阅perdoc 中的此处了解如何操作。

于 2013-06-23T18:07:57.567 回答