【问题标题】:Convert string to float occurs NaN error in Processing将字符串转换为浮点数在处理中发生 NaN 错误
【发布时间】:2015-10-13 19:44:58
【问题描述】:

我在处理中遇到问题,当我将值(字符串)转换为浮点数时,第一个值是好的,但其余的都是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);

【问题讨论】:

  • 我认为您需要将字符串中的每个字符转换为浮点数?尝试遍历字符串中的字符,并在每个字符上调用 foat(c)。
  • 当您打印出myString 变量时,您确定这就是您所得到的吗?这没有多大意义:所有这些换行符是从哪里来的?您使用的是print() 函数而不是println() 函数,所以它们都应该是一行。
  • @flutillie 你有这个转换的示例代码吗?如果有,请发帖,谢谢。
  • @KevinWorkman 在 arduino 串口监视器中,myString 值与处理相同。以及换行符。
  • @Peto 我添加了 arduino 代码

标签: java arduino processing


【解决方案1】:

我认为问题不在 Arduino 内部,而在处理代码内部。

我看了很多,发现有一个错误很有可能解决您的问题。

您使用了val = myport.readString(); 而不是 val = myport.readStringUntil('\n');

差异很少,但在您的情况下会很大。 看看ReadString函数和ReadStringUntil函数。

反正sparkFun tutorial也推荐了。

附:当然,在您的 Arduino 代码中,您必须使用(好吧,就像您正在做的那样)Serial.println(sum); 而不是 Serial.print(sum),因为在最后一种情况下,这不会发送到处理之前已发送换行符。

【讨论】:

  • 我解决了我的问题Sending float variables over serial,感谢您的帮助。@Peto
  • 我看不到你的链接(我的防病毒软件阻止了它),但如果你愿意,你可以自己回答(没有链接,这也可能及时改变)帮助其他用户。不客气;)
  • 我会的。谢谢。 @Peto
【解决方案2】:

我发现我的问题在 Arduino 代码内部,所以我改变了从 Arduino 发送数据的方式。我使用println() 发送数据。这就是通往NaN 的重点。我在google上搜索,然后我测试了不同的方法来改变发送方式,直到我找到这个链接:http://www.varesano.net/blog/fabio/sending-float-variables-over-serial-without-loss-precision-arduino-and-processing

感谢 fabio 的博客,他的博客介绍了解决这个问题的好方法。如果你有同样的问题,也许你可以通过这个来解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-18
    • 2011-11-25
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    相关资源
    最近更新 更多