Page 269 - Hacking Roomba
P. 269

250       Part III — More Complex Interfacing





                               Listing 12-2 Continued

                               function roomba_spin_left($velocity) {
                                   roomba_drive($velocity, -1);
                               }
                               function roomba_spin_right($velocity) {
                                   roomba_drive($velocity, 1);
                               }
                               function roomba_drive($velocity,$radius) {
                                   $vhi = $velocity >> 8;
                                   $vlo = $velocity & 0xff;
                                   $rhi = $radius   >> 8;
                                   $rlo = $radius   & 0xff;
                                   print “vhi:$vhi, vlo:$vlo, rhi:$rhi, rlo:$rlo\n”;
                                   roomba_send_cmd(pack(“C*”, 137, $vhi,$vlo, $rhi,$rlo));
                               }
                               function roomba_init() {
                                   roomba_send_cmd(pack(“C”, 128));  // START
                                   usleep(100000);  # wait 100 ms
                                   roomba_send_cmd(pack(“C”, 130));  // CONTROL
                                   usleep(100000);  # wait 100 ms
                               }
                               function roomba_send_cmd($cmd) {
                                   global $roomba_host, $roomba_port;
                                   $fp =
                               fsockopen($roomba_host,$roomba_port,$errno,$errstr,30);
                                   if (!$fp) {                // couldn’t connect
                                        echo “$errstr ($errno)\n”;
                                   }
                                   else {
                                        fwrite($fp, $cmd);
                                        fclose($fp);
                                   }
                               }
                               function roomba_read_sensors() {
                                   global $roomba_host, $roomba_port, $roomba_sensors;
                                   $fp =
                               fsockopen($roomba_host,$roomba_port,$errno,$errstr,30);
                                   if (!$fp) {                // couldn’t connect
                                        echo “$errstr ($errno)\n”;
                                   }
                                   else {
                                        fwrite($fp, pack(“C”, 142)); // SENSORS
                                        fflush($fp);
                                        $raw = fread($fp, 26);
                                        fclose($fp);
                                        $sensors = unpack(“C*”, $raw);
                                        return $sensors;
                                   }
                               }
                               ?>
   264   265   266   267   268   269   270   271   272   273   274