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).
Espero haberte aclarado bien todo esto.
Saludos