diff --git a/motion/src/motion_manager.c b/motion/src/motion_manager.c index 53084cb906f797585bd28fe9863443c096252cac..7a116dcfb21bcdb14e228ece357b96d38d7aae85 100644 --- a/motion/src/motion_manager.c +++ b/motion/src/motion_manager.c @@ -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 { enable_servo(id); - manager_servos[id].angle=300; + manager_servos[id].angle=180; manager_servos[id].max_value=1023; manager_servos[id].min_value=0; manager_servos[id].center_value=512; diff --git a/motion/src/pan_tilt.c b/motion/src/pan_tilt.c index 66f1ab55340aaec90197d597d212c5e1403d2075..768cef43266d87d018eaecfede18b6e009b28c62 100644 --- a/motion/src/pan_tilt.c +++ b/motion/src/pan_tilt.c @@ -60,14 +60,16 @@ void pan_move_angle(int8_t pan_angle) } 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))+(uint32_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)+(int32_t)manager_servos[pan_servo_id].center_value)); if(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) pan_target_angle=manager_servos[pan_servo_id].cw_limit; - pan_target_angle=pan_target_angle<<7; - pan_moving=0x01; + if(manager_servos[pan_servo_id].current_value==pan_target_angle) + 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) } else { - tilt_current_angle=manager_servos[tilt_servo_id].current_value<<7; - 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; + 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)); if(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) tilt_target_angle=manager_servos[tilt_servo_id].cw_limit; - tilt_target_angle=tilt_target_angle<<7; - tilt_moving=0x01; + if(manager_servos[tilt_servo_id].current_value==tilt_target_angle) + tilt_moving=0x00; + else + tilt_moving=0x01; + tilt_target_angle=(tilt_target_angle<<7); } } } @@ -161,7 +165,7 @@ void pan_tilt_process(void) if(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) tilt_moving=0x00; } } - } + } } manager_servos[tilt_servo_id].current_value=(tilt_current_angle>>7); }