if (flag) {
flag = 0;
#define Kp 40
#define Plim 200
#define Kd 30
#define Dlim 200
#define Ki 1
#define Ilim 200
#define IRATE 20
error = control - position ;
differ = lastError - error;
termP = limit(error/16.0, -Plim, Plim);
termI = limit((termI + (error/IRATE)), -Ilim, Ilim) ;
if (error == 0) termI = 0;
termD = limit(differ, -Dlim, Dlim);
reaction = ((termP * Kp) - (termD * Kd) + (termI * Ki));
reaction = limit(reaction, -255, 255);
if (ABS(reaction) < 55) reaction = 0; // deadzone (SILENCE!)
SetSpeed ( reaction );
prevReaction = reaction;
lastError = error;
}