私は最初の Perl アプリを作成しています。これは、Arduino マイクロコントローラーと通信する AOL インスタント メッセンジャー ボットです。Arduino マイクロコントローラーは、28 時間ごとにランダムにフリーズするシステム管理者のサーバーの電源ボタンを押すサーボを制御します。
難しい作業はすべて完了しました。最後のコードを 1 つ追加して、メイン ループを中断し、ユーザーが「quit」と入力したときに AIM からログアウトしようとしています。
問題は、メイン プログラム ループで STDIN から読み取ろうとすると、入力が入力されるまでプロセスがブロックされ、本質的にボットが非アクティブになることです。読む前にEOFをテストしようとしましたが、サイコロはありません... EOFは常にfalseを返します。
以下は、私が使用しているサンプルコードです。
while(1) {
$oscar->do_one_loop();
# Poll to see if any arduino data is coming in over serial port
my $char = $port->lookfor();
# If we get data from arduino, then print it
if ($char) {
print "" . $char ;
}
# reading STDIN blocks until input is received... AAARG!
my $a = <STDIN>;
print $a;
if($a eq "exit" || $a eq "quit" || $a eq 'c' || $a eq 'q') {last;}
}
print "Signing off... ";
$oscar->signoff();
print "Done\n";
print "Closing serial port... ";
$port->close() || warn "close failed";
print "Done\n";