I think you should be able to make your "locked" variable a static and change your "while" to an "if". As long as the trigger is being held, this code will be executed every time through the main loop. (I think this is approximately what DHoizner was suggesting.)
Code:
static int locked = 0;
static int prev_trig = 0;
if (p1_sw_trig == 1)
{
if (prev_trig == 0) locked = 0; // Clear flag if trigger just pulled.
Switch1_LED = 1 // aiming light turns on when aiming
if (locked == 0)
{
if (PAN_SERVO > PAN_CENTER_PWM_DEFAULT + 20)
{
pwm01 = 127 + aim_gain
pwm02 = 127 + aim_gain
}
else if (PAN_SERVO < PAN_CENTER_PWM_DEFAULT - 20)
{
pwm01 = 127 - aim_gain
pwm02 = 127 - aim_gain
}
else if (PAN_SERVO < PAN_CENTER_PWM_DEFAULT + 21 & PAN_SERVO > PAN_CENTER_PWM_DEFAULT)
{
pwm01 = 127 + aim_soft_gain
pwm02 = 127 + aim_soft_gain
}
else if (PAN_SERVO > PAN_CENTER_PWM_DEFAULT - 21 & PAN_SERVO < PAN_CENTER_PWM_DEFAULT)
{
pwm01 = 127 - aim_soft_gain
pwm02 = 127 - aim_soft_gain
}
else
{
Switch1_LED = 0 // really cool light scrolling that i had to put somewhere in the code
Switch2_LED = 0
Switch3_LED = 0
Switch1_LED = 1
Switch1_LED = 0
Switch2_LED = 1
Switch2_LED = 0
Switch3_LED = 1
Switch3_LED = 0
Switch2_LED = 1
Switch2_LED = 0
Switch1_LED = 1
Switch1_LED = 0
printf("TARGET ACQUIRED");
locked = 1
}
}
}
prev_trig = p1_sw_trig;