2016-06-28 11 views
0

arduinoからintroをアンドロイドにBluetooth経由で送信しようとしていますが、もし私が送ると56と言うと、私はアンドロイド側で8を受け取ります...とにかく私は56を受け取ることができます好ましく文字変換の小数点からasciiへの停止

Arduinoのコードを含む文字列形式で:

int level = 56; 
Serial.write(level); 

アンドロイドコード:

public void run() { 
     byte[] buffer = new byte[128]; 
     int bytes; 


     while (true) { 
      try { 
       bytes = connectedInputStream.read(buffer); 
       String strReceived = new String(buffer, 0,bytes); 
       final String msgReceived =/* String.valueOf(bytes) + 
         " bytes received: " 
         + */strReceived; 



       runOnUiThread(new Runnable(){ 

        @Override 
        public void run() { 
         textStatus.setText(msgReceived); 
         value = msgReceived ; 
        }}); 

値は、クラス変数

静的文字列として定義されています
+3

あなたのコードはバイトを文字列に変換しています。受信したバイトをテキストに変換したくない場合は、文字列コンストラクタを呼び出す理由が明確ではありません。 –

+0

私はアプリの将来の段階で文字を必要とするので、なぜそれが先になったのだろうか –

+1

警告:[new String(byte []、int、int)](https://docs.oracle.com/javase/8/) docs/api/java/lang/String.html#String-byte:A-int-int-)は、プラットフォームのデフォルトの文字セットとエンコーディングを使用します。代わりに、明示的に両方のシステムで同じものを使用する必要があります。 –

答えて

1

バイトを文字列に変換するので、の'8'が得られます。あなたがそれを望まないなら、単に以下のようにしてください。

bytes = connectedInputStream.read(buffer); 
String tmp = ""; 
for(int i=0;i<bytes;i++) 
    tmp += Byte.toString(buffer[i]); 
final String msgReceived = tmp; 

EDIT

あなたは、例えば、次のように送信した場合。

Serial.write(56); 
Serial.write(76); 

あなたはこれらの両方のバイトが読まれている場合5676なりますmsgReceivedに受け取ることになりますどのような。どのような方法でもこの動作を変更できます。

+0

ループの例で編集することはできますか?//また、実行関数から変数にアクセスすることはできません –

+0

受信バイトで何をしたいかによって異なります。さあ、コードを編集し、それが与える出力を述べます。 –

+0

@PuneetSharmaチェックを編集します。 –

関連する問題