mover un motor PaP con pulsador y pararlo con sensor fotoelectrico.

Hola amigos.
stoy haciendo un pequeño sketch, que consiste en hacer funcionar un motor PaP, mediante un pulsador y pararlo cuando se interfiere el haz infrarroja del sensor.
Antes deciros, que el sketch comienza posicionando el motor en la posicion “HOME”, nada mas encenderlo y se para cuando llega el sensor inductivo.
Posteriormente a partir de aquí sería cuando entra la parte que no me funciona, que, una vez en la posición “HOME”, al pulsar el pulsador el motor deberia empezar a funcionar y pararse cuando se interrumpe el haz del infrarrojo.
deciros que la primera parte del posicionamiento, a “HOME”, me funciona y que la parada (si interrumpo el haz infrarroja, el motor para), pero es cuando presiono el interruptor que el motor no gira o se queda vibrando.
en fin a ver si me podeis echar una mano, os lo agradecería.
un saludo.

#include <LiquidCrystal.h>
#include <AccelStepper.h>
AccelStepper motorcabezal(1, 13, 12);  // 1 = interfaz Easy Driver 
                                         // UNO Pin 13 conectado al pin STEP del Easy Driver (pasos).
                                         // UNO Pin 12 conectado al pin DIR del Easy Driver (dirección).
//int pasos = 13;
//int direccion = 12;
int infrarrojos = 32;
int voltaje = 36;
int selec =0;
int lectura = 0;
int lectura2 = 0;
int estado = 0;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //(Rs,En,D4,D5,D6,D7).

const int enable = 11;
int pulsador = 10;  

#define SENSORA 30 //Sensor Inductivo.

void setup() {
      Serial.begin(9600);
      pinMode(enable, OUTPUT);
      digitalWrite(enable, LOW);
      pinMode (pulsador, INPUT);
      pinMode(infrarrojos, INPUT_PULLUP);
      lcd.begin(16,2);              // Inicializar el LCD
      lcd.setCursor(0,0);
      lcd.print(" infrarrojos_1");     
      lcd.setCursor(0,1);           // Cursor a linea 2, posicion 1
      lcd.print("PRUEBA IRD");
      
      delay (3000);

      motorcabezal.setSpeed(600.0);         //
      motorcabezal.setMaxSpeed(600.0);      // velocidad maxima permitida
      motorcabezal.setAcceleration(100.0);  //relación entre aceleración/desaceleración.
       
      
      lcd.clear();
      lcd.setCursor(0,0);           
      lcd.print("POS_TO_HOME");

      pinMode(SENSORA, INPUT); //determino la CONSTANTE "SENSOR1", como entrada.
      //pinMode(SENSORB, INPUT); //determino la CONSTANTE "SENSOR2", como entrada.

      while(digitalRead(SENSORA)==0)
      {
      motorcabezal.move(200);
      motorcabezal.run();
      digitalWrite(enable, HIGH);
      }
      while(digitalRead(SENSORA)==1)
      {
       motorcabezal.move(-50);
       motorcabezal.run();
       digitalWrite(enable, LOW);
       
      }
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("HOME");
      
      delay(2000);
      
      }
 
void loop() {

      estado = digitalRead (pulsador);
      lectura = digitalRead (voltaje);
 
      if (estado == HIGH ){
          digitalWrite (voltaje, HIGH);
          lcd.clear();
          lcd.setCursor (0,0);
          lcd.print ("AJUSTAR POSICION");
          delay (500);
      }

      if (lectura == 1){
          lectura2 = digitalRead (infrarrojos);
          lcd.clear();   
          lcd.setCursor (0,0);
          lcd.print ("AJUSTANDO");
          motorcabezal.move(200);  
          motorcabezal.run();
     
      if (lectura2 == 1){
          motorcabezal.stop();
          //lcd.clear();
          lcd.setCursor (0,1);
          lcd.print ("AJUSTADO");
          digitalWrite (voltaje, LOW);
      }
       
    }

}