You don't actually say what problem you have.
One thing I noticed are lines like this
long error = (encoder0Pos*0.72) - target ;
volatile long encoder0Pos = 0;
The error and encoder0Pos variables are declared as a long which implies that their value could be between -2,147,483,648 and 2,147,483,647. Do you need such large numbers ?
Also, in the first example line above you multiply encoder0Pos by 0.72 and put the result in a long integer, not a float. This may not matter but it is probably not doing exactly what you think.