java - solucion - Convertir cadena en flotante se produce Error de NaN en Procesamiento
nan en java que significa (2)
Me encuentro con un problema en el procesamiento, y cuando convierto el valor (cadena) en flotación, el primer valor es bueno, pero los silencios son todos NaN
. No pude encontrar una manera de resolver esto. E imprimo el valor de la cadena para la prueba. Y es correcto, pero después lo convierto en flotador. Será NaN
.
ps: el valor es de la serie, conecté mi Arduino con Proceesing.
siguiente es una parte de los códigos
while(myport.available() > 0)
{
myString = myport.readString(); //read the string from serial
num = float(myString); // convert the string into float
print(num); // print the num(float), but the first
// value is good, rests are all `NaN` .
//print(myString); // print string, all the values are good
print('' '');
if(myString != null)
{
//num = float(myString);
storeData(myString);
//println(myString);
//print(data[i - 1]);
//println('' '');
delay(1000);
}
}
siguiente es el resultado
conversión finalizada:
no convertir, solo imprimir valor de cadena
siguiente es el código arduino
sum = sqrt(Xg*Xg + Yg*Yg + Zg * Zg);
sum *= 10;
sum = (map(sum, 0, 1024, 0, 5000)/10.0);
Serial.println(sum);
delay(100);
Creo que el problema no está dentro de Arduino sino dentro del código de procesamiento.
Estaba buscando mucho y observé que hay un error que muy probablemente puede resolver su problema.
val = myport.readString();
en lugar de val = myport.readStringUntil(''/n'');
.
Las diferencias son pocas, pero en su caso serían sustanciales. Eche un vistazo a la función ReadString y la función ReadStringUntil .
De todos modos, también está sugerido por el tutorial sparkFun .
PS Por supuesto, en tu código Arduino, debes usar (bueno, como lo hacías) Serial.println(sum);
en lugar de Serial.print(sum)
porque, en el último caso, eso no enviaría nada al procesamiento antes de que se haya enviado un feed de línea.
Encuentro que mi problema está dentro del código de Arduino, así que cambié la forma de enviar los datos desde Arduino. println()
para enviar los datos. Y ese es el punto que lleva a NaN
. Busqué en Google, y luego probé diferentes formas de cambiar la forma de enviar hasta que encontré este enlace: http://www.varesano.net/blog/fabio/sending-float-variables-over-serial-without-loss -precision-arduino-and-processing
Y gracias al blog de fabio, las intrusiones de su blog son una buena manera de resolver este problema. Si tiene el mismo problema, tal vez pueda solucionarlo.