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;
}
}
?>