Problema leyendo datos desde matlab (control P)

Buen día a todos, ocurre que llevo tiempo haciendo un programa para controlar la posición de un motor DC con encoder, por el momento solo quiero que sea un control proporcional. El código funciona correctamente utilizando el monitor serial de arduino, guardando la posición actual, ya que en caso de inicialmente enviar un 50 se moverá a esa posición, y al mandarle un 50 otra vez se mantendrá en esa posición. el verdadero problema viene al mandar los datos a través de matlab, ya que si mando un 50 se mueve a esa posición y al mandar nuevamente 50, la información dentro de arduino se pierde y vuelve a girar hasta la posición de 50. He intentado varias cosas como utilizar la EEPROM (hace cosas extrañas), tratar de dar un delay despues de la lectura y guardar el dato en otra variable y hasta ahora no he logrado solucionar este fallo.

Algo que he leído últimamente es que al abrir y cerrar el puerto desde matlab todos los datos de arduino se pierden, por lo que me gustaría saber si hay alguna manera de solo abrir el puerto una vez, ya que en caso de no cerrarlo me marca error y el programa deja de funcionar

Aquí el código utilizado en arduino

#define CHEA 2                          //Encoder canal A
#define CHEB 3                          // Encoder Canal B
#define PINHA 4                         // Salida Puente H A
#define PINHB 5                         // Salida puente H b
#define PINPWM 10                       // Salida Enable puente H
int maxi = 255, mini = -255;            // Valores para ajustar los limites de la salida del Pwm
volatile double POSE;                   // posicion del encoder
float a = 5;                            // constante cotrol p
float Setpoint, error, pt, p, Output;   // Setpoint= dato enviado desde matlab, nuevo punto  llegar
                                        // error = diferencia entre la posicion actual del encoder y el punto que se quiere llegar
                                        //pt=error por la constante
                                        //p=variable para deternminar el giro del motor
                                        //Output= Pwm para controlar la velocidad del motor

void setup() {
  pinMode(CHEA, INPUT);
  pinMode(CHEB, INPUT);
  pinMode(PINHA, OUTPUT);
  pinMode(PINHB, OUTPUT);
  digitalWrite(CHEA, LOW);
  digitalWrite(CHEB, LOW);
  digitalWrite(PINHA, LOW);
  digitalWrite(PINHB, LOW);
  attachInterrupt(0, Direction, RISING); //Interrupcion para sumar o restar el encoder
  Serial.begin(115200);
}

void loop() {
  if (Serial.available()) {
    Setpoint = Serial.read();
  }

  Serial.println(error);

  error = Setpoint - (POSE / 128);
  pt = a * error;
  p = pt;

  if (p > 0) {
    digitalWrite(PINHA, LOW);
    digitalWrite(PINHB, HIGH);
    if (p > maxi) {
      p = maxi;
    }
  }
  if (p < 0) {
    digitalWrite(PINHA, HIGH);
    digitalWrite(PINHB, LOW);
    if (p < mini) {
      p = mini;
    }
  }
  Output = abs(p);
  analogWrite(PINPWM, Output);
}


void Direction() {
  if (digitalRead(CHEA) == digitalRead(CHEB)) {
    POSE++;
  }
  if (digitalRead(CHEA) != digitalRead(CHEB)) {
    POSE--;
  }
}

Aquí el código utilizado en Matlab.

function Enviar_Datosq1(a)
global arduino1
delete(instrfind({'Port'}, {'COM7'})); 
arduino1 = serial('COM7', 'BaudRate', 9600, 'Terminator', 'CR/LF');
fopen(arduino1);
pause(2)
fwrite(arduino1,a,'uint8');
fclose(arduino1);

Aprecio bastante su ayuda

en arduino haces:

Serial.begin(115200);

pero en Matlab

serial('COM7', 'BaudRate', 9600,

:confused:

Perdón, error de dedo, que estuve moviendo unas cosas en ambos programas para ver si con 9600 baudios podía contar tranquilamente los pulsos del encoder, al final me quede con 115200, pero puse un programa (incluso con otro COM) que es la base de la comunicación entre matlab y arduino