Descontar vueltas motor y se reflejen en el LCD.

Hola amigos y gracias por estar ahi.
Al grano, dispongo de dos motores, uno hace que una plataforma se mueva horizontalmente por un husillo y el otro, gire recogiendo hilo, lo que podríamos denominar en su conjunto, como "BOBINADORA.

Lo que me gustaria, es que cuando seleccionas vueltas, por ejemplo 100 o 200 vueltas, y pasas a seleccionar, grosor del hilo y asi sucesivamente hasta completar la demanda de tus preferencias y que la bobinadora empiece a funcionar. tambien querria, que mientras esta bobinando, apareciese en el LCD las vueltas seleccionadas y cada giro que da el motor fuese descontando.

Ahi ya me pierdo, y no se en que parte del codigo, debo introducir la "funcion", para que aparezca en la pantalla (por ejmplo) "vueltas" y a su lado las vueltas seleccionadas, y que como decia cada giro que da el motor, vaya descontando.

He estado introduciendo y jugando con funciones, dentro de los "while/s" 4 y 5, pero no consigo el resultado esperado.

Por lo demás, este es un sketch sacado de internet, y que mediante su código he confeccionado la construcción "hardware" de la boninadora.

La misma esta funcionando (a falta de ultimar materiales que aun no me han llegado).
Pero poco a poco me gustaria ir introduciendo, mejoras.
GRACIAS.

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //
int avance;
float diametro=1;
int vueltas=1;
int largobobina=3;
int ajuste;
//int valor;
//unsigned long tiempo_espera = 0;
//int contador = 0;

#include <AccelStepper.h> 
AccelStepper motor_plataforma(1, 3, 2);  // 1 = interfaz Easy Driver 
                                     // UNO Pin 3 conectado al pin STEP del Easy Driver 
                                     // UNO Pin 2 conectado al pin DIR del Easy Driver
                                  
AccelStepper motor_carrete(1, 13, 12); // 1 = interfaz Easy Driver 
                                     // UNO Pin 13 conectado al pin STEP del Easy Driver 
                                     // UNO Pin 12 conectado al pin DIR del Easy Driver
int direccionsubprograma=1;

const int enable = 11 ;
int selec=0;
int lcd_key     = 0;
int adc_key_in  = 0;

#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5
  

int read_LCD_buttons()  // para leer los botones

  { adc_key_in = analogRead(0);      // Leemos A0
    if (adc_key_in > 900) return btnNONE;     // Ningun boton pulsado 
    if (adc_key_in < 50)  return btnRIGHT; 
    if (adc_key_in < 250) return btnUP;
    if (adc_key_in < 450) return btnDOWN;
    if (adc_key_in < 650) return btnLEFT;
    if (adc_key_in < 850) return btnSELECT; 
                          return btnNONE;     // Por si todo falla
  }

  void setup(){
      Serial.begin(9600);
      pinMode(enable, OUTPUT);
      digitalWrite(enable, LOW);
      lcd.begin(16,2);              // Inicializar el LCD
      lcd.setCursor(0,0);
      lcd.print("   BOBINADORA");     
      lcd.setCursor(0,1);           // Cursor a linea 2, posicion 1
      lcd.print("    Práctica1    ");
      //tiempo_espera = millis();
      delay (5000);

       motor_plataforma.setSpeed(600.0);
       motor_plataforma.setMaxSpeed(600.0);       // Maximo Speed of X axis
       motor_plataforma.setAcceleration(1600.0);  //relación entre aceleración/desaceleracion, Acceleracion of X axis
       
       motor_carrete.setSpeed(300.0);          // velocidad inicio
       motor_carrete.setMaxSpeed(300.0);       // Maximo Speed of Y axis 
       motor_carrete.setAcceleration(1600.0);  //relación entre aceleración/desaceleracion ,Acceleracion of Y axis

      lcd.clear();
      lcd.setCursor(0,0);           
      lcd.print("AJUSTAR POSICION:");
      lcd.setCursor(0,1);           
      lcd.print("<IZDA> - <DCHA>");
      digitalWrite(enable, HIGH);
   }

   void loop(){


while(selec==0){
     
      lcd_key = read_LCD_buttons();
      
      if( lcd_key == btnRIGHT){
          motor_carrete.move(-300); 
          motor_carrete.run();
      }
    
      if( lcd_key == btnLEFT ){
          motor_carrete.move(+300); 
          motor_carrete.run();
      }
      
      if( lcd_key == btnSELECT){
          digitalWrite(enable, LOW);
          selec=selec+1;
          delay(200);
      }
}

while(selec==1){
      
      lcd.clear();
      lcd.setCursor(0,0);           
      lcd.print("Numero Vueltas:");
                  
      lcd_key = read_LCD_buttons();
      if( lcd_key == btnUP){
          vueltas = (vueltas + 1);
      }
      if ( lcd_key == btnDOWN){
          vueltas = (vueltas -1);
      }
      if( lcd_key == btnRIGHT){
          vueltas = (vueltas + 100);
      }
      if ( lcd_key == btnLEFT ){
          vueltas = (vueltas -100);
      }
      if ( lcd_key == btnSELECT){
          selec=selec+1;
      }
        
    lcd.setCursor(0,1);
    lcd.print(vueltas);
    delay(200);
   }

while(selec==2){

      lcd.clear();
      lcd.setCursor(0,0);        
      lcd.print("Diametro Hilo:");
                  
      lcd_key = read_LCD_buttons();
      if( lcd_key == btnUP){
          diametro = (diametro + 0.1);
      }
      if ( lcd_key == btnDOWN){
          diametro = (diametro - 0.1);
      }
      if ( lcd_key == btnSELECT){
          selec=selec+1;
         }
        
    lcd.setCursor(0,1);
    lcd.print(diametro);
    delay(200);
   }

while(selec==3){

      lcd.clear();
      lcd.setCursor(0,0);        
      lcd.print("Largo Bobina:");            
      lcd_key = read_LCD_buttons();

      lcd_key = read_LCD_buttons();
      if( lcd_key == btnRIGHT){
          largobobina = (largobobina + 20);
      }
      if ( lcd_key == btnLEFT){
          largobobina = (largobobina - 20);
      }
      if( lcd_key == btnUP){
          largobobina = (largobobina + 1);
      }
      if ( lcd_key == btnDOWN){
          largobobina = (largobobina - 1);
      }
      if ( lcd_key == btnSELECT){
          avance = (largobobina * diametro);
          avance = (avance*200);
          selec=selec+1;
      }
        
    lcd.setCursor(0,1);
    lcd.print(largobobina);
    delay(200);   
  }

while(selec==4){

    lcd.setCursor(0,0);
    lcd.print("  TODO LISTO !!");
    lcd.setCursor(0,1);
    lcd.print("  ESPERANDO  ");
        lcd_key = read_LCD_buttons();
        if ( lcd_key == btnSELECT){
           digitalWrite(enable, HIGH);
           selec=selec+1;
           motor_plataforma.moveTo(vueltas*200); 
           lcd.clear(); 
           lcd.setCursor(0,0);
           lcd.print("  BOBINANDO !!");
           
         }
           delay(200);
                     
         }

while(selec==5){

        motor_plataforma.run();
        motor_carrete.run();
          
     if (motor_carrete.distanceToGo()==0){
        
        decidedireccion();
        direccionsubprograma++; 
            
     }

     if (direccionsubprograma>2) {
         motor_carrete.move(avance);
         motor_carrete.run();
         direccionsubprograma=1; 
                  
      }

     if (motor_plataforma.distanceToGo()==0){
        digitalWrite(enable, LOW);
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("FIN DE PROGRAMA!");
        lcd.setCursor(0,1);
        lcd.print("    RESET    ");
        delay(99999);
     }
}
}
void decidedireccion(){
    switch(direccionsubprograma){
        case 1:
            motor_carrete.move(avance);
        case 2:
            motor_carrete.move(-avance);    
    }
}

Este código es tuyo?

surbyte:
Este código es tuyo?

hola Surbyte, y gracias por contestar.

Por lo demás, este es un sketch sacado de internet, y que mediante su código he confeccionado la construcción "hardware" de la boninadora.