2

私は 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 秒後に出力を返しますが、受信したデータをすぐに確認したいのです。何を変更する必要があるか考えていますか?最後に信号を受信して​​からの時間を測定しているように見えるので、タイムアウト部分とは関係ないと思います。何か案は?

4

1 に答える 1

2

バッファリングに苦しんでいますか?セットする

$| = 1;

スクリプトの上部にあります。

于 2012-07-06T15:38:37.410 に答える