Home
Projects
Blog
My Resume
Project193
BRB or BBL
Robot
Guestbook
Old Stuff
Email



Hit Counter

 

<<

functions\straight.c    


Click to enlarge

/*Drives straight with shaft encoders and stops when a bump sensor is hit if selected*/
/*Left encoder=port 1, Right encoder=port 3*/

int straight (int desired_speed, int max_speed, float desired_distance, int sensor_check_switch)
{
int current_tics=0, L_motor_tics, R_motor_tics, L_motor_speed, R_motor_speed, tic_difference, Motor_speed_inc, Motor_speed, avg_tics, max_tics, tic_buffer=0, distance_to_go, check_sensors, reverse=0;

if (desired_speed<0)
{
desired_speed=-desired_speed;
reverse=1;
}

max_tics=(int)(desired_distance/.53);
L_motor_speed=desired_speed;
R_motor_speed=desired_speed;

if (reverse==0)
{
left_motor(desired_speed+0);
right_motor(desired_speed);
}
else
{
left_motor(-desired_speed-0);
right_motor(-desired_speed);
}

L_motor_tics=0;
R_motor_tics=0;
encoder1_counts=0;
encoder3_counts=0;

while (current_tics<max_tics)
{
printf("L %d %d R %d %d T %d\n",L_motor_speed, encoder1_counts, R_motor_speed, encoder3_counts, current_tics);
encoder1_counts=0;
encoder3_counts=0;
sleep(.3);
L_motor_tics=encoder1_counts;
R_motor_tics=encoder3_counts;

if (L_motor_tics<R_motor_tics && L_motor_speed < max_speed)
{
tic_difference = R_motor_tics - L_motor_tics;
Motor_speed_inc = 1;
Motor_speed=L_motor_speed;
Motor_speed = Motor_speed + Motor_speed_inc;
if (Motor_speed>max_speed) Motor_speed = max_speed;
if (reverse==0)
{
left_motor(Motor_speed);
}
else
{
left_motor(-Motor_speed);
}
L_motor_speed=Motor_speed;
}

if (L_motor_tics < R_motor_tics && L_motor_speed >= max_speed)
{
tic_difference=R_motor_tics-L_motor_tics;
Motor_speed_inc=1;
Motor_speed=R_motor_speed;
Motor_speed=Motor_speed-Motor_speed_inc;
if (reverse==0)
{
right_motor(Motor_speed);
}
else
{
right_motor(-Motor_speed);
}
R_motor_speed=Motor_speed;
}

if (R_motor_tics<L_motor_tics && R_motor_speed < max_speed)
{
tic_difference=L_motor_tics-R_motor_tics;
Motor_speed_inc=1;
Motor_speed=R_motor_speed;
Motor_speed=Motor_speed+Motor_speed_inc;
if (Motor_speed>max_speed) Motor_speed=max_speed;
if (reverse==0)
{
right_motor(Motor_speed);
}
else
{
right_motor(-Motor_speed);
}
R_motor_speed=Motor_speed;
}

if (R_motor_tics < L_motor_tics && R_motor_speed >= max_speed)
{
tic_difference=L_motor_tics-R_motor_tics;
Motor_speed_inc=1;
Motor_speed=L_motor_speed;
Motor_speed=Motor_speed-Motor_speed_inc;
if (reverse==0)
{
left_motor(Motor_speed);
}
else
{
left_motor(-Motor_speed);
}
L_motor_speed=Motor_speed;
}

avg_tics=(L_motor_tics + R_motor_tics)/2;
current_tics=current_tics+avg_tics;

if (sensor_check_switch==1)
{
check_sensors=sensor_check();
if (check_sensors!=0)
{
distance_to_go=max_tics-current_tics;
current_tics=max_tics;
}
}
tic_buffer=current_tics;
}
left_motor(0);
right_motor(0);
if (check_sensors==0) return 0;
if (check_sensors>0) return distance_to_go;
}

© '02 James Beams

http://beams.oxonet.com