ademas en la salida del puerto serial se presentan los caracteres no deseados :
output : □□
Quizás no estoy definiendo bien el tamaño del array o desconozco alguna declaracion para la manipulacion de las variables tipo char ... podrian darme una ayuda con esto, de antemano muchas gracias.
Hola, ante todo no te dará errores de compilación si haces Serial.print(data_input[5]); pero no te estará imprimiendo la parte de memoria de data_input sino otra zona de memoria. Esto cuando imprimes, aunque esté mal, no es peligroso pero si haces data_input[5]='a'; esto destruirá alguna otra variable, colgará el microprocesador, reinicio u otra clase de problema de difícil detección.
Ahora vamos al porqué te está pasando eso:
Cuando trabajamos con cadenas y Serial.print (o cualquier otra función) sabe dónde empieza la cadena dado que le dices "data_input" y esto manda la dirección de memoria donde se ubica la variable data_input pero no sabe dónde acaba la cadena de caracteres. ¿cómo funciona entonces? pues todas las cadenas de estilo lenguaje C deben acabar con un caracter nulo (cero en decimal, en el lenguaje C para Arduino se puede usar '\0').
Para empezar y que lo entindas haz estos pasos:
Cambia el tamaño de data_input de 4 a 5 para que pueda albergar un caracter nulo detrás.
Si siempre recibes 4 caracteres, antes de imprimir puedes hacer esto: data_input[4]='\0'; y así decimos donde está el final de la cadena.
Tendiendo en cuenta todo esto, recuerda que el bucle no debe llegar a sizeof() por lo del carácter nulo sino al sizeof()-1
Ojo, si te fijas he puesto data_input[4] y no data_input[5] dado que los arrays siempre empiezan por cero. si tu defines char data_input[4]; tendrás data_input[0] al data_input[3] incluidos pero NO data_input[4] aunque no te de error. Si te fijas en el bucle tienes for(byte x = 0; que está bien pero recuerda que arrays empiezan por [0].
Recuerda que:
char hola[]="HOLA";
Serial.print(sizeof(hola));
No devuelve 4 sino 5 por el carácter nulo final (hola[0] a hola[4] incluidos).