0

したがって、Android Phone (4.2) からバイト配列を Bluetooth 経由で μController に送信する必要があります。これを実現するために、SDK で Google が提供する Bluetooth チャットの例を使用し、少し変更しました。私は2つのコードを持っています。1つは機能しており、1つは機能していません。コード 2 が機能しないのに、コード 1 が機能するのはなぜですか? (明確にするために: コード 1 を使用すると、byte[] を µController に送信できます)

コード 2 で送信ボタンを押すと、アプリがクラッシュします。

もちろん、コード 1 を使用することもできますが、将来のプロジェクトでこのエラーを回避するためにコード 2 が機能しない理由を知りたいです。

コードの違いは次のとおりです。

  • コード 1 は、toggleButton の状態が変化したときに byte[] を送信します。
  • コード 2 は、SendButton が押されたときに byte[] を送信します。

//コード 1

private void setup() {
    Log.d(TAG, "setup()");

    final Context context = getApplicationContext();
    final ToggleButton TBut1 = (ToggleButton)findViewById(R.id.toggleButton1);
    final ToggleButton TBut2 = (ToggleButton)findViewById(R.id.toggleButton2);
    final ToggleButton TBut3 = (ToggleButton)findViewById(R.id.toggleButton3);

    final TextView txt1 = (TextView)findViewById(R.id.textView2);


    final byte[] daten = new byte[1];        

    TBut1.setChecked(false);
    TBut2.setChecked(false);
    TBut3.setChecked(false);
    daten[0]=0;
    TBut1.setOnClickListener(new OnClickListener(){
        public void onClick(View v) {
            if ((TBut1.isChecked() == true)){                    
                daten[0]= (byte) (daten[0] | 4);
                mService.write(daten);                    
                }else{
                    daten[0]= (byte) (daten[0] & ~4);
                    mService.write(daten);
                }   
        }   
    });

    TBut2.setOnClickListener(new OnClickListener(){
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if ((TBut2.isChecked() == true)){                    
                daten[0]= (byte) (daten[0] | 2);
                mService.write(daten);                    
                }else{
                    daten[0]= (byte) (daten[0] & ~2);
                    mService.write(daten);
                }                   
        }   
    });

    TBut3.setOnClickListener(new OnClickListener(){
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if ((TBut3.isChecked() == true)){                  
                daten[0]= (byte) (daten[0] | 1);
                mService.write(daten);                  
                }else{                  
                    daten[0]= (byte) (daten[0] & ~1);
                    mService.write(daten);
                }                   
        }   
    });

    // Initialize the BluetoothChatService to perform bluetooth connections
    mService = new BTService(this, mHandler);

    // Initialize the buffer for outgoing messages
    mOutStringBuffer = new StringBuffer("");

}

//コード 2

 private void setup() {
    Log.d(TAG, "setup()"); 

    final ToggleButton TBut1 = (ToggleButton) findViewById(R.id.toggleButton1);
    final ToggleButton TBut2 = (ToggleButton) findViewById(R.id.toggleButton2);
    final ToggleButton TBut3 = (ToggleButton) findViewById(R.id.toggleButton3);

    final Button sendButton = (Button) findViewById(R.id.button1);

    sendButton.setOnClickListener(new OnClickListener(){
        public void onClick(View v) {
            daten[0] = 0;
            if(TBut1.isChecked()) {
                daten[0] = (byte) (daten[0] | 1);
            } else {
                daten[0]= (byte) (daten[0] & ~1);
            }
            if(TBut2.isChecked()) {
                daten[0] = (byte) (daten[0] | 2);
            } else {
                daten[0]= (byte) (daten[0] & ~2);
            }
            if(TBut3.isChecked()) {
                daten[0] = (byte) (daten[0] | 4);
            } else {
                daten[0]= (byte) (daten[0] & ~4);
            }


            if (mService.getState() == BTService.STATE_CONNECTED) {
                 mService.write(daten);
            }
        }   
    });

    // Initialize the BluetoothChatService to perform bluetooth connections
    mService = new BTService(this, mHandler);

    // Initialize the buffer for outgoing messages
    mOutStringBuffer = new StringBuffer("");

}
4

0 に答える 0