[SOLUC] Problema con función atol. Valores erróneos en algunas partes del Sketch

Buenos días. Mi programa es bastante mas extenso pero aquí la reduje todo lo posible de manera que quede solo la parte donde se produce el problema. Disculpen si la explicación es larga, es que quiero explicar lo mejor posible mi problema.

El programa funciona de la siguiente manera:
Existen dos funciones, la Función 1 y la Función 2. Estas se activan según se reciba por el puerto serie un '1' o un '2' respectivamente.

En el caso de recibir un '1' se ingresa a la función 1. Allí se produce una espera hasta recibir por el puerto serie 29 caracteres que se suponen numéricos. Luego estos 29 caracteres se guardan en un String definido como char DatosMedAut[29];
Luego mediante un segundo String definido como char datos1[5] se van extrayendo algunos elementos del primer String. con este segundo String luego se da valor a unas variables numéricas tipo long mediante la función atol.
Así, todo el String DatosMedAut[29] se descompone en 8 variables numéricas long llamadas NUMERO_1, NUMERO_2 ..... NUMERO_8 las cuales tienen diferentes cantidades de dígitos.
A continuación se imprimen los valores numéricos mediante Serial.print

En el caso de recibir un '2' se ingresa a la función 2. Aquí el procedimiento es similar al de la Función 1 solo que se espera recibir solo 6 caracteres por puerto serie y se los guarda el el String char DatosIrACoord [6]. Luego se utiliza el String char datos2 [3] para descomponer el anterior en 2 variables numéricas tipo long llamadas NUMERO_A y NUMERO_B cada una de 3 dígitos.
Luego también se imprimen estas variables numéricas mediante Serial.print().

El problema es el siguiente:
La función 1 anda perfecto. Espera los 29 bytes, los almacena en el String, luego se descompone mediante el segundo el string y a partir de este ultimo se da valor a las variable long mediante la función atol.
Pero al ejecutar la función 2, se espera los 6 bytes, se los almacena en el String, se lo descompone mediante el segundo String (hasta aquí todo bien xq fui imprimiendo los valores de los string y comprobé que tienen los valores correctos) pero al ejecutare la función atol esta genera valores que no son los del String. Por ejemplo, cuando por el puerto serie envío 123456 las variables numéricas deberían deberían tomar los valores:
NUMERO_A: 123
NUMERO_B: 456
y sin embargo la función atol me genera:
NUMERO_A: 266267264
NUMERO_B: 1231234560
Estos en realidad varían, no son siempre los mismos.

Otro dato interesante es que si corto toda la Función 2 y la pego antes de la Función 1 (es decir, como si re programara y se escribiera primero la Función 2 y luego la 1), la Función 2 ahora funciona perfectamente y es la Función 1 en la que se genera mal los valores, pero no en todas las variables numéricas, sino únicamente en la variable NUMERO_7.
en este caso, si se está en la Función 1 y por ejemplo se envían por el puerto serie 1111....11 (29 veces el 1) la variable NUMERO_7 que debería ser 11111 me aparece como -954437177.

Para la comunicación estuve utilizando el monitor serie.
Como dato extra utilizo Arduino 1.8.3 con windows 7 y una placa Arduino Mega 2560.

Adjunto el Sketch por si es necesario.

Alguien me podría ayudar? por que la verdad no tengo ni idea de cual puede ser el problema. Muchas gracias desde ya.

Prueva3.ino (7.36 KB)

Tal vez es que no estás teniendo en cuenta que para las cadenas de C hay que reservar un byte más para el "terminador de la cadena" (el carácter nulo). En esta respuesta mía en el foro lo explico: Cambiar contenido de cadena dentro de un switch case - #2 by IgnoranteAbsoluto - Software - Arduino Forum

Es por ello que, sin haber visto tu código a fondo, te recomiendo que incrementes en uno el tamaño de datos1 y datos2

Incrementé el tamaño de datos1 y datos2 y anda perfecto! Muy buena la explicación en el link que mandaste también. Mil gracias