Skip to content
Snippets Groups Projects
Commit 65a55dac authored by Sergi Hernandez's avatar Sergi Hernandez
Browse files

Solved a problem when the emmulated servos were sent to their current...

Solved a problem when the emmulated servos were sent to their current position. The module got stucked.
Changed the emmulated servos motion range to 180 degrees instead of 300. Changed the limits accordingly.
parent 91e797ee
No related branches found
No related tags found
No related merge requests found
...@@ -214,7 +214,7 @@ uint8_t manager_init(uint8_t num_servos) ...@@ -214,7 +214,7 @@ uint8_t manager_init(uint8_t num_servos)
else if(model==0x0C00)// Emmulated servos from the expansion board pan&tilt servos else if(model==0x0C00)// Emmulated servos from the expansion board pan&tilt servos
{ {
enable_servo(id); enable_servo(id);
manager_servos[id].angle=300; manager_servos[id].angle=180;
manager_servos[id].max_value=1023; manager_servos[id].max_value=1023;
manager_servos[id].min_value=0; manager_servos[id].min_value=0;
manager_servos[id].center_value=512; manager_servos[id].center_value=512;
......
...@@ -60,14 +60,16 @@ void pan_move_angle(int8_t pan_angle) ...@@ -60,14 +60,16 @@ void pan_move_angle(int8_t pan_angle)
} }
else else
{ {
pan_current_angle=manager_servos[pan_servo_id].current_value<<7; pan_target_angle=(uint32_t)((((int32_t)pan_angle*(int32_t)manager_servos[pan_servo_id].max_value)/((int32_t)manager_servos[pan_servo_id].angle)+(int32_t)manager_servos[pan_servo_id].center_value));
pan_target_angle=((uint32_t)(((int32_t)pan_angle*(int32_t)manager_servos[pan_servo_id].max_value)/((int32_t)manager_servos[pan_servo_id].angle))+(uint32_t)manager_servos[pan_servo_id].center_value);
if(pan_target_angle>manager_servos[pan_servo_id].ccw_limit) if(pan_target_angle>manager_servos[pan_servo_id].ccw_limit)
pan_target_angle=manager_servos[pan_servo_id].ccw_limit; pan_target_angle=manager_servos[pan_servo_id].ccw_limit;
else if(pan_target_angle<manager_servos[pan_servo_id].cw_limit) else if(pan_target_angle<manager_servos[pan_servo_id].cw_limit)
pan_target_angle=manager_servos[pan_servo_id].cw_limit; pan_target_angle=manager_servos[pan_servo_id].cw_limit;
pan_target_angle=pan_target_angle<<7; if(manager_servos[pan_servo_id].current_value==pan_target_angle)
pan_moving=0x01; pan_moving=0x00;
else
pan_moving=0x01;
pan_target_angle=(pan_target_angle<<7);
} }
} }
} }
...@@ -99,14 +101,16 @@ void tilt_move_angle(int8_t tilt_angle) ...@@ -99,14 +101,16 @@ void tilt_move_angle(int8_t tilt_angle)
} }
else else
{ {
tilt_current_angle=manager_servos[tilt_servo_id].current_value<<7; tilt_target_angle=(int32_t)((((int32_t)tilt_angle*(int32_t)manager_servos[tilt_servo_id].max_value)/((int32_t)manager_servos[tilt_servo_id].angle)+(int32_t)manager_servos[tilt_servo_id].center_value));
tilt_target_angle=(((int32_t)tilt_angle*(int32_t)manager_servos[tilt_servo_id].max_value)/((int32_t)manager_servos[tilt_servo_id].angle))+manager_servos[tilt_servo_id].center_value;
if(tilt_target_angle>manager_servos[tilt_servo_id].ccw_limit) if(tilt_target_angle>manager_servos[tilt_servo_id].ccw_limit)
tilt_target_angle=manager_servos[tilt_servo_id].ccw_limit; tilt_target_angle=manager_servos[tilt_servo_id].ccw_limit;
else if(tilt_target_angle<manager_servos[tilt_servo_id].cw_limit) else if(tilt_target_angle<manager_servos[tilt_servo_id].cw_limit)
tilt_target_angle=manager_servos[tilt_servo_id].cw_limit; tilt_target_angle=manager_servos[tilt_servo_id].cw_limit;
tilt_target_angle=tilt_target_angle<<7; if(manager_servos[tilt_servo_id].current_value==tilt_target_angle)
tilt_moving=0x01; tilt_moving=0x00;
else
tilt_moving=0x01;
tilt_target_angle=(tilt_target_angle<<7);
} }
} }
} }
...@@ -161,7 +165,7 @@ void pan_tilt_process(void) ...@@ -161,7 +165,7 @@ void pan_tilt_process(void)
if(pan_current_angle<=pan_target_angle) if(pan_current_angle<=pan_target_angle)
{ {
pan_current_angle=pan_target_angle; pan_current_angle=pan_target_angle;
pan_moving=0x00; pan_moving=0x00;
} }
} }
} }
...@@ -203,7 +207,7 @@ void pan_tilt_process(void) ...@@ -203,7 +207,7 @@ void pan_tilt_process(void)
tilt_moving=0x00; tilt_moving=0x00;
} }
} }
} }
} }
manager_servos[tilt_servo_id].current_value=(tilt_current_angle>>7); manager_servos[tilt_servo_id].current_value=(tilt_current_angle>>7);
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment