我在Processing中遇到问题,当我将值(字符串)转换为float时,第一个值是好的,但是休息符都是NaN
。我找不到解决这个问题的方法。然后我打印字符串值进行测试。它是正确的,但我把它转换成浮动。它将是NaN
。
ps:值来自串口,我将Arduino连接到Proceesing。
以下是代码的一部分
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);
}
}
以下是结果
以下是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);
答案 0 :(得分:0)
我认为问题不在Arduino内部,而是在Processing代码中。
我看了很多,我注意到有一个错误很可能解决你的问题。
您使用了val = myport.readString();
而不是 val = myport.readStringUntil('\n');
。
差异很小,但在你的情况下会很大。 请查看ReadString函数和ReadStringUntil函数。
无论如何,sparkFun tutorial也提出了建议。
P.S。当然,在你的Arduino代码中,你必须使用(好吧,就像你在做的那样)Serial.println(sum);
而不是Serial.print(sum)
,因为在最后一种情况下,它不会发送在发送换行符之前没有处理任何内容。
答案 1 :(得分:0)
我发现我的问题在Arduino代码中,所以我改变了从Arduino发送数据的方式。我使用println()
发送数据。这就是导致NaN
的重点。我在谷歌上搜索,然后我测试了不同的方法来改变发送方式,直到我找到这个链接:http://www.varesano.net/blog/fabio/sending-float-variables-over-serial-without-loss-precision-arduino-and-processing
感谢fabio的博客,他的博客介绍了解决这个问题的好方法。如果你有同样的麻烦,也许你可以解决这个问题。