嗨,我的小脚本使用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 永远不会退出。