2016-06-14 14 views
1

私はJavaとアンドロイドの開発には初めてです。これまで私はarduinoと接続してインターフェースをとることができるアプリを作ってきました。私はarduinoからデータを読み込み(バイト単位で)、データをUTF-8で文字列として出力することができるメソッドを持っています。しかし、単にこのメソッドでデータを読み込んで解釈し、解釈されたデータは別のメソッドから呼び出すことができます。たとえば、アンドロイドのボタンです。以下は、データを読み取るコードです。arduinoでアンドロイド開発

public class MainActivity extends AppCompatActivity { 
    public final String Action_USB_Permission = "com.example.myapplication.USB_PERMISSION"; 
    UsbManager usbManager; 
    UsbDevice device; 
    UsbSerialDevice serial; 
    UsbDeviceConnection connection; 
    String data; 
    String adata; 
    TextView textView; 
    Button tempButton 

    UsbSerialInterface.UsbReadCallback mCallback = new UsbSerialInterface.UsbReadCallback() { 
     @Override 
     public void onReceivedData(byte[] arg0) { 
      try { 
       data = new String(arg0, "UTF-8"); //edit (removed String in "String data =") 


      } catch (UnsupportedEncodingException e) { 
       e.getStackTrace(); 
      } 
     } 
    }; 

    // Serial codes and commands 
    public void pushcmd(String command) { //command for serial 
     serial.write(command.getBytes()); 
    } 

    public void gettemp() { 
     pushcmd("T\n"); 
     serial.read(mCallback); 
     adata = data; 
    } 

    //This is for the app creation i think 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     usbManager = (UsbManager) getSystemService(this.USB_SERVICE); 
     tempButton = (Button) findViewById(R.id.buttontemp); 
    } 

    public void onClickTemp(View view) { //This is the command to print data 
     gettemp(); 
     tvAppend(textView, "\n Measured temperature \n" + adata); 
    } 

    private void tvAppend(TextView tv, CharSequence text) { 
     final TextView ftv = tv; 
     final CharSequence ftext = text; 

     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       ftv.append(ftext); 
      } 
     }); 
    } 
} 

tvAppendは、文字列を画面上のテキストビューに印刷するメソッドです。 私はhttps://github.com/felHR85/UsbSerialからライブラリを持って、それは単に

serial.read(mcallback)、私が試してみましたコマンドでそれを参照するように言いますが、私はからある「測定temperaturenull」その後、測定が後に印刷されているが、受信しますonReceivedDataメソッド。どんな提案も大いに感謝します。もし私が明確でないなら、私に知らせてください、私はもう少し詳しく物事をクリアしようとします。

編集:テキストビューフィールドとボタンを定義したtvAppendメソッドを追加しました。私はまた、私はプログラム全体が含まれていないことを指摘している、私はすべての回路からの実装に続きましたhttp://www.allaboutcircuits.com/projects/communicate-with-your-arduino-through-android/フィードバックのお礼ありがとうございました

コメントはどのように上記に変更されます。データは表示されず、「測定温度」のみが表示されます。

+0

'Stringデータ=' –

+0

はまた、あなたが不足しているように見えるから 'STRING'を削除するようにしてください[mcve]を作ることの一部を完成させる。 textView変数とtvAppendメソッドの両方が欠落しています –

+0

@ cricket_007十分に明確ではないことをお知らせいただきありがとうございます。私も文字列から文字列を削除しようとしました= – robman

答えて

0

ここでデータの流れに混乱していると思います。

  1. あなたは、データとは、更新することを読ん
  2. Arduinoのは、将来の
  3. でいくつかの未知のポイントに戻っていくつかのデータを送信アプリ
  4. それはArduinoのにpushcmdを呼び出し上のボタンをクリックしTextView

ここで、そのロジックを使用して、コードをそのように構成できます。 (気軽にあなたのアプリに再編成することができます)。

public void onClickTemp(View view) { 
    gettemp(); 
    // No value of "adata" or "data" is guaranteed here 
} 

public void gettemp() { 
    pushcmd("T\n"); 
    serial.read(mCallback); // asynchronous callback 
    // No value of "adata" or "data" is guaranteed here, either 
} 

UsbSerialInterface.UsbReadCallback mCallback = new UsbSerialInterface.UsbReadCallback() { 
    @Override 
    public void onReceivedData(byte[] arg0) { 
     try { 
      // Here, you are guaranteed some data 
      String data = new String(arg0, "UTF-8"); 
      tvAppend(textView, "\n Measured temperature \n" + data); 
     } catch (UnsupportedEncodingException e) { 
      e.getStackTrace(); 
     } 
    } 
}; 

それとも、あなたはそのすべての一つの方法に折りたたましたい場合は、その後、

public void onClickTemp(View view) { 
    pushcmd("T\n"); 

    serial.read(new UsbSerialInterface.UsbReadCallback() { 
     @Override 
     public void onReceivedData(byte[] arg0) { 
      try { 
       // Here, you are guaranteed some data 
       String data = new String(arg0, "UTF-8"); 
       tvAppend(textView, "\n Measured temperature \n" + data); 
      } catch (UnsupportedEncodingException e) { 
       e.getStackTrace(); 
      } 
     } 
    }); 
} 
関連する問題