switch case y motor paso a paso

buenas,soy usuario nuevo del foro.Mucho gusto.

Queria consultar si ven algo de error en este programa porque no me gira el motor.
cargo por teclado variables velocidad,teimpo y numero de ciclos pero cuando ejecuta tecla D no pasa nada.

uso ardioni mega y motor 28byj48

#include <Wire.h>

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);

#include <Keypad.h>

#include <Stepper.h>

const int stepsPerRevolution=4096; 

Stepper stepper(stepsPerRevolution,8,9,10,11);


int velocidad ;

long tiempodeparo ;
int bucle;
int i=1;

long numero;
int n;
int valor;
char tecla;

const byte FILAS = 4; //four rows
const byte COLUMNAS = 4; //three columns

char keys[FILAS][COLUMNAS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'},
};

byte PINESFILAS[FILAS] ={37,35,33,31}; //¬connect to the row pinouts of the keypad
byte PINESCOLUMNAS[COLUMNAS] ={28,26,24,22} ; //connect to the column pinouts of the keypad

Keypad TECLADO = Keypad( makeKeymap(keys), PINESFILAS, PINESCOLUMNAS, FILAS, COLUMNAS );

void setup() {

stepper.setSpeed(velocidad);
  Serial.begin(9600); 
  lcd.init();
  lcd.backlight();
 
  bienvenida();
  delay(1000);
  
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("PULSE UNA TECLA:");
  lcd.setCursor(0,1);
  lcd.print("A:V B:E C:MA D:PI");
  delay(100);
              }

void loop() {
  tecla = TECLADO.getKey(); 
  switch (tecla) {            //   Abre sentencia de cambio        
      case 'A':               //Caso A
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("NUEVA VELOCIDAD:");
        delay(500);
        velocidad = reemplazarvariable();
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("LA NUEVA VELOCIDAD");
        lcd.setCursor(0,1);
        lcd.print("ES: ");
        lcd.print(velocidad);//Imprime en LCD la variable velocidad
        delay(2500);
        NUEVAS_INSTRUCCIONES(); // Se llama a la funcion NUEVAS_INSTRUCCIONES()
        break;
      case 'B':
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("NUEVO DESCANSO:");
        delay(500);
        tiempodeparo = reemplazarvariable(); //variable de tiempo de detencion del motor
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("EL NUEVO DESCANSO");
        lcd.setCursor(0,1);
        lcd.print("ES: ");
        lcd.print(tiempodeparo);// se imprime la variable "tiempodeparo"
        delay(2500);
        NUEVAS_INSTRUCCIONES(); // Se llama a la funcion NUEVAS_INSTRUCCIONES()
        break;
      case 'C':
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("NUEVO de veces:");
        delay(500);
        bucle = reemplazarvariable();  //variable numero de ciclos en cada direccion que da el motor
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("numero de veces");
        lcd.setCursor(0,1);
        lcd.print("ES: ");
        lcd.print(bucle);// se imprime el numero de ciclos
        delay(2500);
        NUEVAS_INSTRUCCIONES();
        break;
     
      case 'D':
     if(i<=bucle){
      lcd.clear();
      lcd.print("ejecutando");
      lcd.setCursor(0, 1);
      lcd.print("programa");
     
stepper.step(-stepsPerRevolution);
  delay(tiempodeparo); //Pequeña pausa

  //Girar una vuelta entera en sentido contrario
  
stepper.step(stepsPerRevolution);
  delay(tiempodeparo); //Pequeño
          i=i+1;
        }
      else{
      lcd.clear();
      lcd.print("finalizado");   
         }      
        NUEVAS_INSTRUCCIONES();
        break;
       }
    delay(100);
}

void bienvenida() {
  lcd.setCursor(0,0);
  lcd.print("BIENVENIDO");
  lcd.setCursor(0,1);
  lcd.print("LIC.VILCHERREZ");
}

void guardar() {
  valor = convertir(tecla);
  numero = numero * 10 + valor;
  lcd.setCursor(n, 1);
  lcd.print(valor);
  n = n + 1;
}

void borrar() {
  n =  (n == 0) ? 0 : n - 1;
  numero = (numero - valor) / 10;
  lcd.setCursor(n, 1);
  lcd.print(" ");
}

//La sentencia "reemplazarvariable()"se desarrolla para los casos B y C de la sentencia "switch"

int reemplazarvariable() {
  numero = 0; 
  n = 0;
  while (tecla != '#' ) {      //Mientras no se presione la tecla "#".
    tecla = TECLADO.getKey();     //Devuelve valor coficado ASCII de la tecla generandose una variale.
    if( tecla != 0){              //Si la variable tecla no es igual a cero ASCII,o sea que se presiona ninguna.
      if (tecla != 'A' && tecla != 'B' && tecla != 'C' && tecla != 'D' && tecla != '*' && tecla != '#') { //Si la tecla presionada no es A,B,C,D,* o #
        guardar(); // Se guarda el valor de la tecla presionada.
      }
      if (tecla == '*') {  //Si se presiona "*"luego de guardar el valor ,este se borra del display.
        borrar();
      }
      delay(200);
    }
  }
  return numero; //El retorno es un numero equivalente a "reemplazarvariable()".
}

int convertir( char tecla){
  switch(tecla){
    case '1':return 1;
            break;
    case '2':return 2;
            break;
    case '3':return 3;
            break;
    case '4':return 4;
            break;
    case '5':return 5;
            break;
    case '6':return 6;
            break;
    case '7':return 7;
            break;
    case '8':return 8;
            break;
    case '9':return 9;
            break;
    case '0':return 0;
            break;
  }
}
void NUEVAS_INSTRUCCIONES(){
  lcd.clear();               //Borra la pantalla
  lcd.print("ESPERANDO NUEVAS"); 
  lcd.setCursor(0, 1);
  lcd.print("INSTRUCCIONES");
  delay(1500);
  lcd.print("PULSE UNA TECLA:");
  lcd.setCursor(0,1);
  lcd.print("A:V B:E C:MA D:PI");
  delay(100);
}

espero haber posteado correctamente el pprograma