Tenía un problema al hacer la promoción de datos (casting) todo lo estaba llevando a INTEGER, había perdida de datos, código actualizado
Sobre parseInt() dice en
http://www.prometec.net/funcionesii/“parseInt() devuelve el primer número entero (de tipo long) válido a partir de la posición actual. ... parseInt() termina cuando se encuentra el primer carácter que no es un dígito Esta función forma parte de la claseStream y es llamada por cualquier clase que herede de Stream (Wire, Serial, etc)”
Al entrar un numero decimal en una solicitud de número entero encuentra que el carácter punto y retorna la parte entera, pero la parte decimal de lleva a la segunda entrada, esto se puede visualizar ejecutando el código y escribiendo en la primera entrada por ejemplo 1.234
Imprime 1
Luego imprime 234, Parece ser que punto hace la veces de espacio entonces la entrada se interpreta como dos argumentos,
¿Cómo evitar esto? es decir que la linea de entrada "Serial Monitor" interprete un solo argumento. o que 1.234 lo trunque a 1
Similarmente sucede lo mismo si se ingresa 1 234
PD:
Si se desborda en 1 el valor del límite SUPERIOR del tipo de dato, retorna el límite inferior del tipo de dato
1:> 256 -> 0 [0, 255]
2:> 32768 -> -32,768 [-32,768, ..., 32,767]
3:> 65536 -> 0 [0, ..., 65,535 ]
4:> 2147483648 -> -2147483648 [-2,147,483,648, ... 2,147,483,647]
5:> 4294967296 -> 0 [0, ..., 4.294.967.295]
Si se desborda en -1 el valor del límite INFERIOR del tipo de dato, retorna el límite superior del tipo de dato
1:> -1 -> 255 [0, 255]
2:> -32769 -> -32,767 [-32,768, ..., 32,767]
3:> -1 -> 65535 [0, ..., 65,535 ]
4:> -2147483649 -> 2147483647 [-2,147,483,648, ... 2,147,483,647]
5:> -1 -> 4294967295 [0, ..., 4.294.967.295]
/!\ para la tarjeta de desarollo "Arduino Due" los rangos son mas amplios para algunos casos =)
La instrucción read no verifica el desborde, si el programador no tiene en cuenta los límites del tipo de dato se puede dar un error lógico.