Stepper motor step accuracy

And here is the video and code of last version of project.

In here I'm using stepper as a servo, first 45 degree, than another 45 degree, finaly 90 degree back. It still has little errors but when it go opposite direction, fixing little error.

Sorry about my english btw.

Video:http://tinypic.com/player.php?v=250nux2>&s=8#.U3OFY_l_tZ5

Code:

//Boran KARADUMAN Color Sorter Project
//**************************************** LIBRARIES ***************************************
#include <Average.h> // See http://playground.arduino.cc/Main/Average
#include <Servo.h>
#include <Stepper.h>
//************************************ GLOBAL VARIABLES ************************************
//Sensor variables
int S0=1,S1=7,S2=6,S3=5, LED=4; 
int OUT=2;
//Servo and stepper Variables
Servo servo360;
int cpos=0;
int abc;
int check1=0;
int check2 ;
int check3;
const int pwmA = 3;
const int pwmB = 11;
const int brakeA = 9;
const int brakeB = 8;
const int dirA = 12;
const int dirB = 13;
const int STEPS = 25; // 360 / stepAngle
// Initialize the Stepper class
Stepper myStepper(STEPS, dirA, dirB);

void setup() {
  Serial.begin(9600);
  TCS3200_Setup();
  servo360.attach(10); 
  delay(100);
  myStepper.setSpeed(300);

  // Turn on pulse width modulation
  pinMode(pwmA, OUTPUT);
  digitalWrite(pwmA, HIGH);
  pinMode(pwmB, OUTPUT);
  digitalWrite(pwmB, HIGH);

  // Turn off the brakes
  pinMode(brakeA, OUTPUT);
  digitalWrite(brakeA, LOW);
  pinMode(brakeB, OUTPUT);
  digitalWrite(brakeB, LOW);

}

void loop() {
  Serial.println(check1);
  Serial.println(check2);
  Serial.println(check3);
  
  myStepper.step(STEPS);  
  delay(250);
  Serial.println(ReadColor());  
  servoDrive(abc); 
  delay(500);
  myStepper.step(STEPS);
  delay(125);
  myStepper.step(-STEPS*2);
  delay(500);

}

void TCS3200_Setup() {
  pinMode(S0,OUTPUT); 
  pinMode(S1,OUTPUT); 
  pinMode(S2,OUTPUT); 
  pinMode(S3,OUTPUT); 
  pinMode(LED,OUTPUT); 
  pinMode(OUT,INPUT); 
}

void TCS3200_On() {
  digitalWrite(LED,HIGH); // Switch LED on
  digitalWrite(S0,HIGH); //Output frequency scaling (100%)
  digitalWrite(S1,HIGH);
  delay(5);
}

void TCS3200_Off() {
  digitalWrite(LED,LOW); // Switch LED off
  digitalWrite(S0,LOW); //Power off sensor
  digitalWrite(S1,LOW);
}

void NoFilter() { //Select no filter
  digitalWrite(S2,HIGH); 
  digitalWrite(S3,LOW);
  delay(5);
}

void RedFilter() { //Select red filter
  digitalWrite(S2,LOW); 
  digitalWrite(S3,LOW);
  delay(5);
}

void GreenFilter() { //Select green filter
  digitalWrite(S2,HIGH); 
  digitalWrite(S3,HIGH);
  delay(5);
}

void BlueFilter() { //Select blue filter
  digitalWrite(S2,LOW); 
  digitalWrite(S3,HIGH);
  delay(5);
}

char* ReadColor() { //0=white, 1=orange, 2=yellow, 3=red, 4=green, 5=blue, 6=object out of range
  float FrequencyClear,FrequencyRed,FrequencyGreen,FrequencyBlue;
  int PercentageRed,PercentageGreen,PercentageBlue;
  TCS3200_On();
  NoFilter();
  FrequencyClear=500.0/pulseIn(OUT,LOW,10000); // Frequency in kHz
  RedFilter();
  FrequencyRed=500.0/pulseIn(OUT,LOW,10000); // Frequency in kHz
  GreenFilter();
  FrequencyGreen=500.0/pulseIn(OUT,LOW,10000); // Frequency in kHz
  BlueFilter();
  FrequencyBlue=500.0/pulseIn(OUT,LOW,10000); // Frequency in kHz
  TCS3200_Off();
  //Output frequency blue, green, red percentage represents the ratio of the 
  //respective color to the Clear channel absolute value:
  PercentageRed=int((FrequencyRed/FrequencyClear)*100.0);
  PercentageGreen=int((FrequencyGreen/FrequencyClear)*100.0);
  PercentageBlue=int((FrequencyBlue/FrequencyClear)*100.0);
  
     check1=PercentageRed;
   check2=PercentageGreen;
   check3=PercentageBlue;
   
  //Learned blue, green, red percentage values of different colors
  int SavedColorRed[] = {42,50,30,20}; 
  int SavedColorGreen[] = {36,20,45,26};
  int SavedColorBlue[] = {16,25,28,40};
  char* GetColor[] = {"yellow","red","green","blue",""};
  int ColorArray[3];
  int i_color; 
  int ClosestColor;
  int MaxDiff;
  int MinDiff=300;
  if(FrequencyClear<1.5)ClosestColor=4; // Object out of range
  else {
    for (i_color=0; i_color<4; i_color++) { //Find closest color
      ColorArray[0]=abs(SavedColorRed[i_color]-PercentageRed);
      ColorArray[1]=abs(SavedColorGreen[i_color]-PercentageGreen);
      ColorArray[2]=abs(SavedColorBlue[i_color]-PercentageBlue);
      MaxDiff=maximum(ColorArray,3);
      if (MaxDiff<MinDiff) {
        MinDiff=MaxDiff;
        ClosestColor=i_color;
        abc=i_color;
       }
     }
   }
   return GetColor[ClosestColor];  
} 

void servoDrive(int curr){
    switch(curr){
      case 1: 
      servo360.write(72);
         break;
      case 2:
      servo360.write(87);
         break;
    case 0:
      servo360.write(108);
         break;
    case 3:
      servo360.write(130);
         break;
     default:  ;}
}

Btw why moderators moved this topic also project guidience. I think my problem is about fixing stepper's steps accuracy with programing.