Problemas con interacción de sensor lion presición

Saludos

Crei que esta secuencia seria simple, basicamente lo que la programacion deberia lograr era:

a) un interruptor al estar en posición ON da inicio a la secuencia
b) arranca el motor 1 (motor a pasos tipo nema 23) y gira el equivalente a 120º (se hiso un mecanismo para ajustar los ciclos pues este tipo de motor no da exactos los 120º)
c) al terminar el motor 1 arranca el motor 2 y se mantine girando
d) con un retraso arranca el motor 3 y gira asta que el sensor Lion presicion le manda la señal de paro para motor 2 y 3
e) vuelve a iniciar el ciclo

todo asta el punto d funciona de ahi en adelante es un caos

añado el código para su revisión (solo las secciones en conflicto)

/*
 //----------------------------------------   METODO ETIQUETADO DE BOTELLAS   ------------------------------------------------------//

//Metodo que hace girar la botella y provee la etiqueta para el etiquetado
//Variables de control:
//  pinControlM2 = pin del arduino encargado de enviar el numero de pasos que el motor 2 debe de realizar
//  pinControlM3 = pin del arduino encargado de enviar el numero de pasos que el motor 3 debe de realizar
//  direccionM2 = la direccion a la que gira el motor "2" (Giro de botella sobre su eje) "i" es al contrario de las manecillas del reloj y "d" es con las manecillas del reloj
//  direccionM3 = la direccion a la que gira el motor "3" (Giro de las etiquetas hasta que se detecte un espacio) "i" es al contrario de las manecillas del reloj y "d" es con las manecillas del reloj

void etiquetado(int pinControlM2, int pinControlM3 , char direccionM2 , char direccionM3)
{
  
    //Se establecen las direcciones de giro al motor 2 
  switch(direccionM2)
  {
    case 'i':
      digitalWrite( giroMotor2 , LOW);
      break;
    case 'd':
      digitalWrite( giroMotor2 , HIGH);
      break;
  }
  
    //Se establecen las direcciones de giro al motor 3 
  switch(direccionM3)
  {
    case 'i':
      digitalWrite( giroMotor3 , HIGH);
      break;
    case 'd':
      digitalWrite( giroMotor3 , LOW);
      break;
  }
  
    //El delay de 1/2 segundo del motor 2 con respecto al motor 3
    //Se gira solo el motor 2 por X numero de pasos especificados en la variable  "pasosVentajaM2"
  for (int i=1; i <= pasosVentajaM2; i++){
    digitalWrite( pinControlM2 , HIGH);
    delayMicroseconds(velocidadMotores);
    digitalWrite( pinControlM2 , LOW);
    delayMicroseconds(velocidadMotores);
  } 
  
  
    //Pequeño limite para que los dos motores arranquen al mismo tiempo y el sensor lea de nuevo la etiqueta y se brinque el espacio.
      //El numero de pasos que el sensor esta "ciego" se especifica en la variable "pasosMargenEtiquetas"
  for (int i=1; i <= pasosMargenEtiquetas; i++){
    digitalWrite( pinControlM2 , HIGH);
    digitalWrite( pinControlM3 , HIGH);
    delayMicroseconds(velocidadMotores);
    digitalWrite( pinControlM2 , LOW);
    digitalWrite( pinControlM3 , LOW);
    delayMicroseconds(velocidadMotores);
  } 
  
  
 
    //Los motores 2 y 3 continuaran girando simultaneamente hasta que el arduino detecte el espacio entre etiquetas del sensor, cuando este espacio 
    //sea detectado el motor 3 dejara de girar y solo girara el motor encargado de hacer girar la botella para que la etiqueta se adhiera.

  estadoSensorEtiquetas = 's';                          //Se reinicia el sensor para que al siguiente ciclo no para el motor 3
  for (int i=1; i <= pasosRestantesM2 - pasosMargenEtiquetas; i++){
    switch ( estadoSensorEtiquetas)
    {
        //'s' si hay etiqueta por lo tanto siguen girando los motores 2 y 3
      case 's':
        valorSensor = analogRead(A0);
          if( valorSensor * (5.0 / 1023.0) < 1){
            digitalWrite( pinControlM2 , HIGH);
            digitalWrite( pinControlM3 , HIGH);
            delayMicroseconds( velocidadMotores - 40 );
            digitalWrite( pinControlM2 , LOW);
            digitalWrite( pinControlM3 , LOW);
            delayMicroseconds( velocidadMotores - 40 );
          }else{
            digitalWrite( pinControlM2 , HIGH);
            delayMicroseconds(velocidadMotores);
            digitalWrite( pinControlM2 , LOW);
            delayMicroseconds( velocidadMotores - 40 );
            estadoSensorEtiquetas = 'n';
          }
        break;
        
        //'n' no hay etiqueta por lo tanto solo gira el motor 2
      case 'n':
        digitalWrite( pinControlM2 , HIGH);
        delayMicroseconds(velocidadMotores);
        digitalWrite( pinControlM2 , LOW);
        delayMicroseconds(velocidadMotores);
        break;
    }
  }
 
 
     //  ESTE METODO SE EJECUTARA SOLO SI LA VARIABLE "extensionTiempoEtiquetas" ES:   " TRUE "
       //Consiste en agregar funcionamiento al motor 3 para que siga girando si aun no detecta el espacio.
  if (extensionTiempoEtiquetas)
  do{
   switch ( estadoSensorEtiquetas)
    {
        //'s' si hay etiqueta por lo tanto siguen girando los motores 2 y 3
      case 's':
        valorSensor = analogRead(A0);
          if( valorSensor * (5.0 / 1023.0) < 1){
            digitalWrite( pinControlM3 , HIGH);
            delayMicroseconds( velocidadMotores - 40 );
            digitalWrite( pinControlM3 , LOW);
            delayMicroseconds( velocidadMotores - 40 );
          }else{
            estadoSensorEtiquetas = 'n';
          }
        break;
    }
  }while(estadoSensorEtiquetas == 's');

  
}

Que es esto?

valorSensor = analogRead(A0);
          if( valorSensor * (5.0 / 1023.0) < 1){

Menor que 1?
Estas usando un sensor analogico como si fuera digital no entiendo.
La salida del valorSensor puede estar entre 0 y 1023
Que sea 0 es tan poco probable como un Arduino en una embotelladora con ruidos electricos.

Verifica eso.
sera
valorSensor = digitalRead(A0); // busca un pin digital o cuentanos que sensor estas usando ahi pero usar 1 para comparar es un error.

gracias

lo checo y retro-alimento