Xbees not playing nice with eachother

Receiver Code:

// Movement of Optical encoder is translated to moving stepper

#include <AccelStepper.h>

//encoder/motor/driver setup
int easyDriverMicroSteps = 2; 
int rotaryEncoderSteps = 75; 
int motorStepsPerRev = 200; 

int MinPulseWidth = 50; //too low and the motor will stall, too high and it will slow it down

int easyDriverStepPin = 4;
int easyDriverDirPin = 5;
int enablePin = 6;

volatile long encoderValue = 0;
int dataReceive = 0;
long lastencoderValue = 0;

//Values for focus points
int inPoint;
int outPoint;

//value for variable speed
int speedValue = 1000;
int mappedSpeed;

int mode;
#define Rewind 1
#define Play 2
// Stop mode is meant to enable Xbee receive changes in speed
// in values 0-255, remap to 200-100 and reyrn to Play/Rewind.
// currently not working.
#define Stop 3


AccelStepper stepper(1, easyDriverStepPin, easyDriverDirPin);

//Sleep Function - to diable ED when not active
long previousMillis = 0;
int sleepTimer = 5000;

void setup(){
  Serial.begin(115200);

  stepper.setMinPulseWidth(MinPulseWidth); 
  stepper.setMaxSpeed(speedValue);             //variable to later determine speed play/rewind
  stepper.setAcceleration(100000); 
  stepper.setSpeed(50000); 

  pinMode(enablePin, OUTPUT);
}

void loop(){
  stepper.run();
  if (Serial.available()>0)
  {
    digitalWrite (enablePin, LOW);
    previousMillis = millis();
    dataReceive = Serial.read();
    //function to sort data reveived and action.
    dataSort ();
    //take care of variable speed
    speedValue = 1000;
    stepper.setMaxSpeed(speedValue); 
    int stepsPerRotaryStep = (motorStepsPerRev * easyDriverMicroSteps) / rotaryEncoderSteps;
    stepper.moveTo(encoderValue * stepsPerRotaryStep);
  }
  else
  {
    //Stepper sleep after 5sec of no data
    unsigned long currentMillis = millis ();
    if (currentMillis - previousMillis>sleepTimer)
    {
      digitalWrite (enablePin, HIGH);
    }
  }

  switch (mode)
  {

  case Stop:
   /* if (Serial.available()>0)
      dataSort(); */ 
    
    break;
    
  case Rewind:
    //take care of variable speed
    stepper.setMaxSpeed(speedValue);
    stepper.moveTo(inPoint);
    stepper.run();
    //Serial.println ("Rcase");
    if(stepper.currentPosition()==inPoint)
    {
     
       
       Serial.write (1);  
     
    mode=Stop; 
    }
    
    break; 

  case Play:
    //take care of variable speed
    stepper.setMaxSpeed(speedValue);
    stepper.moveTo(outPoint);
    stepper.run();
    //Serial.println ("Pcase");
    if(stepper.currentPosition()==outPoint)
    {
      
       Serial.write (1); 
     
     mode=Stop;
    }
    break;
  }
}

//Sort the received data and decide action
void dataSort()
{
  if (dataReceive == 3)
  {
    inPoint = stepper.currentPosition();
    Serial.print ("inpoint = ");
    Serial.println (inPoint);
  }
  else if (dataReceive == 5)
  {
    outPoint = stepper.currentPosition();
    Serial.print ("outpoint = "); 
    Serial.println (outPoint); 
  } 
  else if (dataReceive == 1)
  {
    encoderValue ++;
    Serial.println(dataReceive);
  }
  else if (dataReceive == 2)
  {
    encoderValue --;
    Serial.println(dataReceive);
  }
  else if (dataReceive == 4)
  {
    //function to make Play or Rewind
    defineDirection();
  }
  else
    //Checking is data can be received indeed for changing speed.
    //currently after some revolutions of encoder Xbees stop communicating until reset.
    Serial.println (dataReceive);

}

void defineDirection()
{
  if (stepper.currentPosition()!=inPoint)
  { 
    Serial.println ("REWIND");
    mode = Rewind; 
  }
  else if (stepper.currentPosition() == inPoint)
  {
    Serial.println ("PLAY");
    mode = Play;
  }
}

void stepperMove ()
{
  stepper.run();
  int stepsPerRotaryStep = (motorStepsPerRev * easyDriverMicroSteps) / rotaryEncoderSteps;
  stepper.moveTo(encoderValue * stepsPerRotaryStep); 
}