Falta a você conhecimento em array e a forma de envio de dados seriais,
todo array tem a obrigação de conter 0 (* zero em seu ultimo elemento, que no ultimo codigo você esqueceu, a função atoi() só vai parar de ler quando encontrar um NULL byte que é o zero...
No windows, mais precisamente no Serial monitor do arduino, sempre que aperta ENTER, ele manda os caracteres digitados, seguidos de '\r' '\n' que simbolizam os bytes 13 e 10,
exemplo:
quero enviar HELLO [enter] ---> vai sair H E L L O \r \n.
no seu ultimo programa até funciona certo na primeira vez, na proxima não porque você esqueceu que o \r \n está tambem no buffer do arduino. Seu codigo não previa o tratamento de caracteres não-numericos...