Arduino Serial to Processing - 无法将字符串转换为int

时间:2016-05-31 05:34:07

标签: arduino serial-port integer processing

我希望这很简单:

Arduino将传感器读数作为DEC字符串发送。该代码正常工作......它发送距离传感器读数字符串。 "数字"字符串标识传感器,然后告诉距离。 20,217,3100,410

这是它从Arduino发送的方式:

 
void printDistance(int id, int dist) {
Serial.print(id);//id's the sensor 
if (dist >=150 || dist <= 0 ) {
 int zero = 0;
  Serial.print(zero, DEC);
} else {
  Serial.print(dist, DEC);
 }
Serial.println("");//line break
}//end print distance

处理中

void draw() {

  if (myPort.available() > 0) { 
     myString = myPort.readStringUntil(lf);
     int val = Integer.parseInt(myString);
     //int val = Integer.valueOf(myString);

       if (val >= 0) {

          //center sensor 
        if ((val >= 30 && val <= 39) || (val >= 310 && val <= 399) || (val >= 3100 && val <= 3150)) {
              //playBear(); 
              println(val);
              fill(13, 96, 115); //blue
               rect(150, 150, 100, 100);
             }
            //right sensor   
        else if (((val >= 20) && (val <=29)) || ((val >= 210) && (val <= 299)) || ((val >= 2100) && (val <= 2150))) {
              //playLaugh();
              println(val);
              fill(204, 102, 0); //orange
              rect(50, 50, 100, 100);
            }

...more else if's

Processing为输入字符串&#34; 30&#34;

抛出&#34; NumberFormatException

问题是:如何从Arduino Serial中获取字符串实际转换为整数,以便我可以将它用于那些写得不好的条件语句?

2 个答案:

答案 0 :(得分:0)

这些行中的任何一行都应该起作用:

 
int val = Integer.parseInt(myString);
int val = Integer.valueOf(myString);

如果他们不是,那么myString出了问题。通常,错误是由包含非数字字符的String变量引起的,例如"ABC""XYZ"

但是,看起来该值是数字,因为它打印出"30"。所以其他事情正在发生。

我想知道是否在myString变量中添加了一个额外的隐形字符。尝试做这样的事情:

println(myString);
println(myString.length());

您还可以查看Character课程中的有用功能,然后检查myString中的每个字符,以确保它符合您的预期。

答案 1 :(得分:-1)

尝试使用myString.toInt(myString必须是String对象而不是char数组)