私は 433 MHz 信号用の RFXCOM トランシーバーを持っています。問題なく信号を送信できる(たとえば、ランプをオンにする)プログラムをまとめることができました。ただし、リモコンから信号を受信できるようにしたいです。少しグーグルすると、この作業コードが得られました。
use Device::SerialPort;
my $PortObj=Device::SerialPort->new("/dev/ttyUSB1");
$PortObj->user_msg(ON);
$PortObj->databits(8);
$PortObj->baudrate(38400);
$PortObj->parity("none");
$PortObj->stopbits(1);
$PortObj->handshake("rts");
my $STALL_DEFAULT=10; # how many seconds to wait for new input
my $timeout=$STALL_DEFAULT;
$PortObj->read_char_time(0); # don't wait for each character
$PortObj->read_const_time(1000); # 1 second per unfulfilled "read" call
my $chars=0;
my $buffer="";
while ($timeout>0) {
my ($count,$saw)=$PortObj->read(1); # will read _up to_ 255 chars
if ($count > 0) {
$chars+=$count;
$buffer.=$saw;
print $saw;
# Check here to see if what we want is in the $buffer
# say "last" if we find it
}
else {
$timeout--;
}
}
if ($timeout==0) {
die "Waited $STALL_DEFAULT seconds and never saw what I wanted\n";
}
理解できないことが 1 つあります。このスクリプトは約 10 秒後に出力を返しますが、受信したデータをすぐに確認したいのです。何を変更する必要があるか考えていますか?最後に信号を受信してからの時間を測定しているように見えるので、タイムアウト部分とは関係ないと思います。何か案は?