Dudas programación motor paso a paso bipolar.

Buenos días. Soy nuevo en este foro así que primero que nada pido disculpas si no he abierto el tema donde tocaba o si no he puesto el código como debía. Por favor, hacedmelo saber y si hace falta lo cambio.
El caso es que en una asignatura estoy empezando con el Arduino y voy un poco perdido puesto que yo de programación hice un semestre con lo básico de C y nada más.
Tengo que hacer que un motor paso a paso bipolar se mueva en un sentido, en el otro o que vuelva a la posición inicial. Sin embargo con el código que he puesto no me sale exactamente lo que “debería”.
Lo que debería/quiero que haga: El programa pregunta (a traves de la pantalla del ordenador) si quieres que el motor se mueva hacia la izquierda, hacia la derecha o que vuelva a la posición inicial. Una vez ha preguntado esto pregunta el número de pasos (si se selecciona la opción de girar, si se selecciona la opción de volver lo hace automáticamente)
Lo que hace: Pregunta de manera constante llenando la pantalla con la primera pregunta. En caso de que se ponga un número (0, 1 o 2) aparece la frase indicada pero vuelve a empezar el bucle y vuelve a preguntar la primera frase.
No sé si me he explicado bien, he intentado comentar el código lo máximo posible para que sea sencillo de entender. Cualquier cosa que no se entienda preguntadmela e intentaré explicarla mejor.
Un saludo.

#include <Stepper.h> // importamos la libreria de paso a paso

#define STEPS 200// definimos el número de pasos por vuelta
 //Nombramos el motor, el numeor de paso y pins de control
 Stepper stepper(STEPS,8,9,10,11);// Numero de pasos por vuelta y pns de control
 
 int num; //numero de pasos
 int direccion; //dirección de giro
 int vel=60; //velocidad de giro en RPM
 int en = 7; //declaracion del pin digital Enable que habilita el funcionamiento del circuito
 int cont;
void setup() {
 // put your setup code here, to run once:
 Serial.begin (9600);
  pinMode (en, OUTPUT);
  digitalWrite(en, HIGH);// escritura de un "1" fijo en el pin en
  stepper.setSpeed(vel);//fija la velocidad de gio;
}

void loop() {
  Serial.println ("izquierda(1)/derecha(2)/origen (0)");//selección del sentido de giro o si se quiere volver al orígen
  if(Serial.available()){//hay algo q leer del puerto serie
    direccion=Serial.read();//guarda en direccion lo que lee del puerto serie direccion=Serial.read()
    Serial.println("número de pasos");// selección del numero de pasos
    if(Serial.available()){// Si hay algo que leer 
   num=Serial.read();//guarda en direccion lo que lee del puerto serie num=Serial.read()
   if(Serial.available()){// si puede leer del puerto serio
  if( direccion==1){
    {for(int i = 0; i >=num; i++)
      {stepper.step(1);//dará un paso cada vez hasta que llegue al numero de pasos
      delay(1);
      cont++// suma una cifra al contador;
      }
    }
  }
   else if(direccion==2){
    {for(int i = 0; i >=num; i++)
      {stepper.step(-1);
      cont--;}}}
   else if(direccion==0){
    if(cont>0){// si el contador es mayor que cero deberá ir al otro lado
    for(int a=cont;a>0;a--)
    {stepper.step(-1);}// da un paso en sentido contrario}
    if(cont<0){
    cont=cont*-1;
    for(int a=cont;a>0;a--)
    {stepper.step(-1);}}
     
   }
      
    else{
      Serial.println("Error! Dirección equivocada.");// si no se selecciona ninguno de los anteriores aparece el error}
  
  }
  } 
  } 
  }

Para programar un arduino tienes que tener claro que lo que hay dentro del bloque loop() se ejecuta constantemente una y otra vez ,es decir ,ejecuta todas las lineas de codigo y cuando acaba ,comienza de nuevo por la primera hasta la ultima y asi hasta que lo apagues,luego tienes que adaptar la programacion a este modo de funcionamiento .

jose:
Para programar un arduino tienes que tener claro que lo que hay dentro del bloque loop() se ejecuta constantemente una y otra vez ,es decir ,ejecuta todas las lineas de codigo y cuando acaba ,comienza de nuevo por la primera hasta la ultima y asi hasta que lo apagues,luego tienes que adaptar la programacion a este modo de funcionamiento .

Vale, vamos a ver si lo he entendido bien. En el setup() se pone el código que solo se ejecuta una vez mientras que en el loop() se ejecuta constantemente, aunque no le dé ninguna instrucción para continuar ¿no?
Para lo que quiero hacer, ¿podría poner un bucle en el setup()?
Muchas gracias por la respuesta.

Podrias poner el primer serial.print porque supongo que solo quieres que salga una vez lo de izquierda,derecha,etc pero el resto no,porque requiere ir comprobando si hay datos disponibles en el buffer serial.Luego,tener un serial.available detras de otro tampoco te va a funcionar bien ,podrias crearte una cadena o codigo donde mandes todos los datos de una vez y luego los recoges e interpretas en un array de caracteres o un String.