Encoder Simulator Timing

CODE PART 2

// Simulate an encoder using 2 DOs.  The sim goes fwd or backwards
// and raises  flag when the cycle is complete.
// the simulation has 5 states.
//
// 4 cycles:
// A--0 0 1 1
// B--0 1 1 0
void SimulateEncoder(byte Pos, byte On)
{
  static char State=0;
  char A,B;

  // Direction change using IO mapping
  // make encoder go fwd / backwards
  if(Pos)
  {
    A=11;
    B=12;
  }
  else
  {
    A=12;
    B=11;
  }

  //manage states
  if(On)
  {
    State++;
  }
  else
  {
    digitalWrite(A, LOW);
    digitalWrite(B, LOW); 
    digitalWrite(led, LOW);
    State = 0; 
  }

  //Encoder sim  
  switch(State)
  {
  case 0: 
    digitalWrite(A, LOW);//Serial.println("1"); 
    //digitalWrite(B, LOW); //S L OOOOO W
    //digitalWrite(led, LOW);
    break;
  case 1: 
    //digitalWrite(A, LOW);//Serial.println("2"); 
    digitalWrite(B, HIGH);
    digitalWrite(led, HIGH);  // onboard LED
    break;
  case 2: 
    digitalWrite(A, HIGH);//Serial.println("3"); 
    //digitalWrite(B, HIGH);
    //digitalWrite(led, HIGH);
    break;
  case 3: 
    //digitalWrite(A, HIGH);//Serial.println("4"); 
    digitalWrite(B, LOW);
    digitalWrite(led, LOW);  // onboard LED
    State = -1;
    break;
  default:
    State = 0;
  }//END case

}//END SimulateEncoder