Page 342 - Hacking Roomba
P. 342

Chapter 14 — Putting Linux on Roomba                323




                               Listing 14-4 Continued

                                   printf “Usage: $0 {serialport} “.

                                           “{init|forward|backward|spinleft|spinright|stop}\n”;
                                   exit(1);
                               }
                               sub roomba_init() {
                                   # this style stty is for linux
                                   system(“stty -F $PORT 57600 raw -parenb -parodd cs8 -hupcl
                               -cstopb clocal”);
                                   printf “\x80” > $PORT;   sleep 0.2;
                                   printf “\x82” > $PORT;   sleep 0.2;
                               }
                               sub roomba_forward() {
                                   $vel=”\x00\xc8”;
                                   $rad=”\x80\x00”;
                                   printf “\x89$vel$rad” > $PORT;
                               }
                               sub roomba_backward() {
                                   $vel=”\xff\x38”;
                                   $rad=”\x80\x00”;
                                   printf “\x89$vel$rad” > $PORT;
                               }
                               sub roomba_spinleft() {
                                   $vel=”\x00\xc8”;
                                   $rad=”\x00\x01”;
                                   printf “\x89$vel$rad” > $PORT;
                               }
                               sub roomba_spinright() {
                                   $vel=”\x00\xc8”;
                                   $rad=”\xff\xff”;
                                   printf “\x89$vel$rad” > $PORT;
                               }
                               sub roomba_stop() {
                                   $vel=”\x00\x00”;
                                   $rad=”\x00\x00”;
                                   printf “\x89$vel$rad” > $PORT;
                               }

                               # If not enough arguments were passed, return
                               usage() if( @ARGV < 2 );
                               $PORT = $ARGV[0];
                               $CMD  = $ARGV[1];
                               if( $CMD eq ‘init’ ) {
                                   roomba_init();
                               }
                               elsif( $CMD eq ‘forward’ ) {
                                   roomba_forward();
                               }
                                                                                              Continued
   337   338   339   340   341   342   343   344   345   346   347