Cambio de sentido motor pap

Tras darle muchas vueltas (y no solo al motor) he conseguido estabilizar mas o menos el sistema el problema está en cambiar el sentido al motor cuando yo presiono un botón.
El efecto que tiene con el siguiente código es que solo cambia de sentido si presiono el botón justo en el momento que el motor está haciendo una pausa, esto es relativamente fácil tal y cmo está ahora con una pausa de medio segundo, pero en el momento que reduzco la pausa unas veces acierto y otras no. ¿hay alguna forma de cambiar el sentido de giro sin esperar a esa pausa?

/********************************************************
**      Codigo basado en                               **
**  http://lusorobotica.com/viewtopic.php?t=103&f=106  **
*********************************************************/


boolean sentido_giro = true;
int    dirPin = 8;      //pin para controlar la dirección
int    stepperPin = 9;  //pin para controlar los pasos del motor
int    pulsador = 10;       // PIN para el pulsador pulsador

void setup() {
  pinMode(dirPin, OUTPUT);
  pinMode(stepperPin, OUTPUT);
  pinMode (pulsador, INPUT);
}

  void loop(){
     //tecla();
      boolean a=sentido_giro; // asigna el sentido de giro a la variable a
      
      do {
        tecla();
        Giro(sentido_giro);
      } while (sentido_giro==a);
 }
 
 void Giro(boolean dir){
   step(dir,360);
   delay(500);
  }

  //Giro_A
  /*
  void Giro_A(){
    step(true,360); 
    delay(500);
 }
 
  //Giro_B
  void Giro_B(){
    step(false,360); //Cambia el sentido de giro del motor
    delay(500);    //realiza una pausa antes de dar el siguiente paso
  }
*/
 void step(boolean dir,int steps){
   digitalWrite(dirPin,dir); 
   delay(100);
   for(int i=0;i<steps;i++){
   digitalWrite(stepperPin, HIGH);
   delayMicroseconds(5000);  
   digitalWrite(stepperPin, LOW);
   delayMicroseconds(200); 
  
} 
 }

void tecla(){
   unsigned long time = millis();  
    if (digitalRead(pulsador) == HIGH) { // si se pulsa....
      while(digitalRead(pulsador)) {     // mientras se mantiene presionado...
        if (millis()-time >= 30) { sentido_giro=!sentido_giro; }// Si la pulsación > 30 ms., cambia el valor de dir 
      }
    }
}