将字符串转换为浮点数在处理

时间:2015-10-10 14:03:15

标签: java arduino processing

我在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);
    }
   }

以下是结果

转换finshed:

enter image description here

不转换,仅打印字符串值

enter image description here

以下是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);

2 个答案:

答案 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的博客,他的博客介绍了解决这个问题的好方法。如果你有同样的麻烦,也许你可以解决这个问题。