#!/usr/local/bin/perl -w ########################################### # center-fire - Fire USB rocket launcher # Mike Schilli, 2009 (m@perlmeister.com) ########################################### use strict; use Device::USB::MissileLauncher::RocketBaby; use Time::HiRes qw(usleep gettimeofday tv_interval); my $rb = Device::USB::MissileLauncher::RocketBaby ->new(); do_until("left"); do_until("down"); my $right_start = [gettimeofday]; do_until("right"); my $right_elapsed = tv_interval( $right_start, [gettimeofday] ); my $up_start = [gettimeofday]; do_until("up"); my $up_elapsed = tv_interval( $up_start, [gettimeofday] ); do_until("left", $right_elapsed/2); do_until("down", $up_elapsed/2); for(1..3) { do_until("fire"); usleep(100_000); } ########################################### sub do_until { ########################################### my($what, $max_time) = @_; my $start = [gettimeofday]; while($rb->cando( $what )) { $rb->do( $what ); usleep(100_000); last if defined $max_time and tv_interval($start, [gettimeofday]) > $max_time; } $rb->do("stop"); }