Step Motor problema implementazione funzioni

Buonasera a tutti, sto avendo problemi con l'implementazione di un motore passo passo (28BYJ-48). Quando inserisco tutto nel loop il motore fa i suoi giri orari e antiorari in successione, però provando a mettere il tutto in due funzioni (dato che mi serve poter decidere quando azionare il motore) mi esegue in automatico la funzione open-box e lo fa una sola volta.
Non so più cosa fare, mi serve una mano.. Grazie

Vi posto il codice

#include <AccelStepper.h>

#define HALFSTEP 8

#define motorPin1  8     // IN1 on ULN2003 ==> Blue   on 28BYJ-48
#define motorPin2  9     // IN2 on ULN2004 ==> Pink   on 28BYJ-48
#define motorPin3  10    // IN3 on ULN2003 ==> Yellow on 28BYJ-48
#define motorPin4  11    // IN4 on ULN2003 ==> Orange on 28BYJ-48
int endPoint = 1024;        // Move this many steps - 1024 = approx 1/4 turn

// NOTE: The sequence 1-3-2-4 is required for proper sequencing of 28BYJ-48
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

void setup()
{
  Serial.begin(9600);
  Serial.println(stepper1.currentPosition());
  stepper1.setMaxSpeed(1500.0);
  stepper1.setAcceleration(200.0);
  stepper1.setSpeed(500);
}

void loop()
{
    if(Serial.available()>0){
      int x = Serial.read();
      //Serial.print(x);
      if(x == 48) open_box();  //0 da seriale
      else if(x==49)close_box();  //1 da seriale
    }
      stepper1.run();
}
void open_box(){
  //Change direction at the limits
    if (stepper1.distanceToGo() == 0){
     //Serial.println(stepper1.currentPosition());
     while(stepper1.currentPosition() <endPoint){
       stepper1.setCurrentPosition(0);
       endPoint = -endPoint;
       stepper1.moveTo(endPoint);
       Serial.println(stepper1.currentPosition());
     }
    }
  }
  void close_box(){
    if (stepper1.distanceToGo() == 0){
     //Serial.println(stepper1.currentPosition());
     while(stepper1.currentPosition() >-endPoint){
       stepper1.setCurrentPosition(0);
       endPoint = -endPoint;
       stepper1.moveTo(endPoint);
       Serial.println(stepper1.currentPosition());
     }
    }
   }

Vi aggiungo anche il codice sorgente senza modifiche:

#include <AccelStepper.h>

#define HALFSTEP 8

#define motorPin1  8     // IN1 on ULN2003 ==> Blue   on 28BYJ-48
#define motorPin2  9     // IN2 on ULN2004 ==> Pink   on 28BYJ-48
#define motorPin3  10    // IN3 on ULN2003 ==> Yellow on 28BYJ-48
#define motorPin4  11    // IN4 on ULN2003 ==> Orange on 28BYJ-48

int endPoint = 1024;        // Move this many steps - 1024 = approx 1/4 turn

// NOTE: The sequence 1-3-2-4 is required for proper sequencing of 28BYJ-48
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

void setup()
{
  Serial.begin(9600);
  Serial.println(stepper1.currentPosition());
  delay(5000);
  stepper1.setMaxSpeed(1000.0);
  stepper1.setAcceleration(100.0);
  stepper1.setSpeed(200);
  stepper1.moveTo(endPoint);
}

void loop()
{
  //Change direction at the limits
    if (stepper1.distanceToGo() == 0)
   {
     Serial.println(stepper1.currentPosition());
     stepper1.setCurrentPosition(0);
     endPoint = -endPoint;
     stepper1.moveTo(endPoint);
     Serial.println(stepper1.currentPosition());
   }
    stepper1.run();
}