2016-05-31 6 views
0

これは簡単です。Arduinoシリアル処理 - 文字列をintに変換できません

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 

処理が30、「入力文字列についてはNumberFormatException "を"

をスローします

質問:Arduinoシリアルから実際に整数に変換された文字列を取得するにはどうしたらよいですか?書かれた条件文?

+0

正しい文はコードにありますが、コメントアウトされています。 Integer.parseInt()を使用してください – mhopeng

+0

ありがとうございますが、私は両方のステートメントを試してみましたが、両方とも同じエラーをスローします... –

答えて

-1

は、これらの行のいずれかが動作するはずmyString.toInt(のmyStringは、Stringオブジェクトではなくchar配列である必要はあり)

0

を使用しよう:

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

そうでない場合、myStringで何かが間違っています。通常、エラーはまたは"XYZ"のような数字以外の文字を含む変数Stringによって発生します。

しかし、それは"30"が印刷されているので数値が数値のようです。だから何かが続いている。

myString変数に余分な目に見えない文字が追加されているのだろうかと思います。このようなものをやってみてください。

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

ます。また、便利な機能のためにCharacterクラスをチェックアウトすることができ、それはあなたが期待するものを保持していることを確認するmyString内のすべての文字を確認してください。

+1

私はラインターミネーターをチェックします。 Arduino printlnコマンドは、行または文字列の終わりであることがわかるようにターミネータを追加します。ターミネータを削除するには、trim(MyString)を使用します。 – mhopeng

+0

@mhopengええと、それはまさに私が推測していることです。 'trim()'関数の良いアドバイス。 –

関連する問題