mantener ultimo dato cuando no se ha utilizado toda la memoria// ARRAYS-ARREGLOS

buen día.

mi trabajo consiste en un brazo robótico, el cual pueda grabar datos y posteriormente reproducirlos.
Tengo un problema con mi programación ( SOY NOVATO EN PROGRAMACIÓN), estoy utilizando arreglos- arrays. Digamos que escribí para que mi arduino1 guardara 150 datos "[150]", para que luego mi servo los reprodujera. El caso es que si no llego a utilizar todos los datos que ya había escrito que se iban a utilizar (150), entonces en el momento en que se reproducen los datos, en el monitor serial (Serial.println), observo que se autocompleta con el grado " 0 ", cosa que yo no puedo aceptarlo, debido a que ese grado en mi brazo robótico es un movimiento imposible de lograr(mi estructura, diseño, no lo permite).

CABE RESALTAR que usé en "servo.write" en mi void setup() para que en un comienzo se muestre primero lo grados que yo quiero, y no el grado " 0 ", que no es aceptable para mi estructura(diseño).

LES ADJUNTO MI CÓDIGO PARA QUE ME PUEDAN AYUDAR. (soy principiante u.u)
GRACIAS DE ANTEMANO.

#include <Servo.h>
Servo miservo;
Servo miservo1;
Servo miservo2;
Servo miservo3;


#include <SoftwareSerial.h> // TX RX software library for bluetooth
 

 
int bluetoothTx = 10; // bluetooth tx to 10 pin
int bluetoothRx = 11; // bluetooth rx to 11 pin
 
SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);

int servo;
int servo1;
int servo2;
int servo3;

int servo0;
int servo11;
int servo22;
int servo33;
  
int contador=0;
int estado=0;
int boton=2;
int ultimoestado=0;
int posiciones[150];
int posiciones1[150];
int posiciones2[150];
int posiciones3[150];
int i=0;



void setup(){

pinMode(5, OUTPUT);
pinMode(4, OUTPUT);
pinMode(3, OUTPUT);
pinMode(2, INPUT);


miservo.attach(6);
miservo1.attach(7);
miservo2.attach(12);
miservo3.attach(8);
miservo3.write(60);
miservo2.write(120);
miservo1.write(72);
miservo.write(3);


Serial.begin(9600);
bluetooth.begin(38400);

}

void loop()

  
{
  
  estado=digitalRead(2);
   if(estado != ultimoestado){
    if(estado == HIGH)
    {
      contador++;
      Serial.print("contador :");
      Serial.println(contador);

      
    }
   }
  ultimoestado=estado;
//********************************* NORMAL ( SIN PULSAR BOTON )**********************//  
  
  if (contador == 0)
  { 
    contador = 0;
    digitalWrite(5,HIGH);
    
      
    
    if(bluetooth.available()>= 2 )
  {
    unsigned int servopos = bluetooth.read();
    unsigned int servopos1 = bluetooth.read();
    unsigned int realservo = (servopos1 *256) + servopos;
    
    Serial.print(servopos);
    Serial.print(" ");
    Serial.println(servopos1);
 
    if (realservo >= 1000 && realservo <1040) {
      int servo = realservo;
      servo0 = map(servo, 1000, 1180, 0, 180);
      miservo.write(servo0);
      Serial.println("Servo0 ON");
      delay(10);
    }
    if (realservo >= 2070 && realservo <2170) {
      int servo1 = realservo;
      servo11 = map(servo1, 2000, 2180, 0, 180);
      miservo1.write(servo11);
      Serial.println("Servo1 ON");
      delay(10);
    }
    if (realservo >= 3100 && realservo <3180) {
      int servo2 = realservo;
      servo22 = map(servo2, 3000, 3180, 0, 180);
      miservo2.write(servo22);
      Serial.println("Servo2 ON");
      delay(10);
    }
    if (realservo >= 4000 && realservo <4124) {
      int servo3 = realservo;
      servo33 = map(servo3, 4000, 4180, 0, 180);
      miservo3.write(servo33);
      Serial.println("Servo3 ON");
      delay(10);
    
   }
  
  }
    
    

 
  
 
      
     
  
  
  
    

 }
 
 
  


//********************************* GRABAR (PRIMERA PULSADA)**********************//

   if (contador == 1)
  {
    digitalWrite(4,HIGH);
    digitalWrite(5,LOW);
    
      
    
   
  int estadosw=digitalRead(4);



 
    if (i<150)
    {
      if(bluetooth.available()>= 2 )
  {
    unsigned int servopos = bluetooth.read();
    unsigned int servopos1 = bluetooth.read();
    unsigned int realservo = (servopos1 *256) + servopos;
    Serial.println(realservo);
 
    if (realservo >= 1000 && realservo <1180) {
      int servo = realservo;
      servo0 = map(servo, 1000, 1180, 0, 180);
      miservo.write(servo0);
      Serial.println("Servo 1 ON");
      delay(10);
    }
    if (realservo >= 2000 && realservo <2180) {
      int servo1 = realservo;
      servo11 = map(servo1, 2000, 2180, 0, 180);
      miservo1.write(servo11);
      Serial.println("Servo 2 ON");
      delay(10);
    }
    if (realservo >= 3000 && realservo <3180) {
      int servo2 = realservo;
      servo22 = map(servo2, 3000, 3180, 0, 180);
      miservo2.write(servo22);
      Serial.println("Servo 3 ON");
      delay(10);
    }
    if (realservo >= 4000 && realservo <4180) {
      int servo3 = realservo;
      servo33 = map(servo3, 4000, 4180, 0, 180);
      miservo3.write(servo33);
      Serial.println("Servo 4 ON");
      delay(10);
    }
    
    
  
      posiciones[i]=servo0;
      posiciones1[i]=servo11;
      posiciones2[i]=servo22;
      posiciones3[i]=servo33;
   
     
    Serial.println(posiciones3[i]);
  
       
    
       
      
      
       if (i>=0 && i<=100)
       {
     Serial.println("                                        grabando");
       }
     
       
       
     if ( i>125)
    {
     Serial.println("                                        grabando y finalizando");
    }
   
    i++;
  
      
  } 
  }
    
  }
  //********************************* REPRODUCIR **********************//
  if (contador == 2)
  {
    
     digitalWrite(3,HIGH);
       for(int i=0;i<150;i++)
    {
      
    
    Serial.print("reproduciendo posiciones ");
    Serial.print(posiciones[i]); 
    Serial.print("  reproduciendo posiciones1 ");
    Serial.print(posiciones1[i]);
    Serial.print("  reproduciendo posiciones2 ");
    Serial.print(posiciones2[i]);
    Serial.print("  reproduciendo posiciones3 ");
    Serial.println(posiciones3[i]);


    miservo.write(posiciones[i]);
    miservo1.write(posiciones1[i]);
    miservo2.write(posiciones2[i]);
    miservo3.write(posiciones3[i]);
    
    if(posiciones3[i]==0)
    {
      posiciones3[i]=120;
      miservo3.write(120);
    delay(10);
    }
    
    digitalWrite(3,HIGH);
    digitalWrite(4,LOW);

      
    
     
  
     
     delay(10);


    estado=digitalRead(2);
    if(estado!=ultimoestado)
    {
      if (estado==HIGH)
      {
        break;
        contador++;
      }
      delay(50);
    }
    ultimoestado=estado;
    } 
  }

 //********************************* VOLVER A INICIO **********************//
   if (contador == 3)
  {
    
     digitalWrite(3,HIGH);
     digitalWrite(4,HIGH); 
     digitalWrite(5,HIGH);
     delay(400);
     digitalWrite(3,LOW);
     delay(200);
     digitalWrite(4,LOW); 
     delay(200);
     
       
     Serial.println("alto");
     
     
     contador=0;
  Serial.println(contador);
  }
  
  
  
}

Y si te lees las normas del foro y posteas correctamente tu código??

Debe ser de esa manera. GRACIAS.

A ver si lo entiendo.
En esta parte ya solucionas parte de tu problema verdad?

if(posiciones3[i]==0)
    {
      posiciones3[i]=120;
      miservo3.write(120);
    delay(10);
    }

Lo que podrías hacer es salir del bucle for en el momento que detectes que alguna posición es =0.

for(int i=0;i<150;i++)
    {
      
    if ( (posiciones[i] ==0) || (posiciones1[i] ==0) ||(posiciones2[i] ==0) ||(posiciones3[i] ==0) ){
      break;
    }
    Serial.print("reproduciendo posiciones ");
    Serial.print(posiciones[i]); 
    Serial.print("  reproduciendo posiciones1 ");
    Serial.print(posiciones1[i]);
    Serial.print("  reproduciendo posiciones2 ");
    Serial.print(posiciones2[i]);
    Serial.print("  reproduciendo posiciones3 ");
    Serial.println(posiciones3[i]);


    miservo.write(posiciones[i]);
    miservo1.write(posiciones1[i]);
    miservo2.write(posiciones2[i]);
    miservo3.write(posiciones3[i]);

Cada vez que llenas un vector (array) podrias reservar la posicion 0 para almacenar el valor de la cantidad de elementos que lomintegran. De ese modo al reproducir sus valores solo lo haras con los que has llenado.