Wie zu Lesen ist, kontinuierliche Daten zu und zeigen Sie es

Ich bin senden von kontinuierlichen Daten von PIC (von der analog-input), um das bluetooth-Modul und dann versuche ich zu Lesen, dass Sie mit android (in HyperTerminal bekomme ich Werte von 0 bis 255). Wie könnte ich mein code zum Lesen von strings von 3 bytes und sofort zeigen Sie Sie in die TextView. Jetzt kann ich die Anzeige von Daten, aber es ist zu langsam und die Werte werden aktualisiert, nur wenn die Taste gedrückt wird. Hier ist meine MainActivity.java:

public class MainActivity extends Activity {
  private static final String TAG = "bluetooth2";

  Button btn1, btn2, btn3, btn4;
  TextView txtArduino;
  Handler h;

  private static final int REQUEST_ENABLE_BT = 1;
  final int RECIEVE_MESSAGE = 1;        //Status  for Handler
  private BluetoothAdapter btAdapter = null;
  private BluetoothSocket btSocket = null;
  private StringBuilder sb = new StringBuilder();

  private ConnectedThread mConnectedThread;

  //SPP UUID service
  private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

  //MAC-address of Bluetooth module (you must edit this line)
  private static String address = "00:12:09:25:92:57";

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);



btn1 = (Button) findViewById(R.id.btn1);                    //activity no. 1
btn2 = (Button) findViewById(R.id.btn2);                    //activity no. 2
btn3 = (Button) findViewById(R.id.btn3);                    //activity no. 3
btn4 = (Button) findViewById(R.id.btn4);                    //activity no. 4
txtArduino = (TextView) findViewById(R.id.txtArduino);      //for display the received data from the Arduino






h = new Handler() {
    public void handleMessage(android.os.Message msg) {

        switch (msg.what) {
        case RECIEVE_MESSAGE:
            byte[] readBuf = (byte[]) msg.obj;
            String strIncom = new String(readBuf, 0, msg.arg1);                     //create string from bytes array
            //Toast.makeText(MainActivity.this, strIncom, Toast.LENGTH_SHORT).show();
            sb.append(strIncom);                                                //append string
            int endOfLineIndex = sb.indexOf("\r\n");                            //determine the end-of-line
            if (endOfLineIndex > 0) {                                           //if end-of-line,
                String sbprint = sb.substring(0, endOfLineIndex);               //extract string
                sb.delete(0, sb.length());                                      //and clear
                txtArduino.setText("Data from PIC: " + sbprint);                //update TextView
                //btn2.setEnabled(true);
                //btn1.setEnabled(true); 
            }
            //Log.d(TAG, "...String:"+ sb.toString() +  "Byte:" + msg.arg1 + "...");
            break;
        }
    };
};


btAdapter = BluetoothAdapter.getDefaultAdapter();       //get Bluetooth adapter
checkBTState();

btn1.setOnClickListener(new OnClickListener() {
  public void onClick(View v) {
    //btn1.setEnabled(false);
    mConnectedThread.write("0");    //Send "0" via Bluetooth
    //Toast.makeText(getBaseContext(), "Turn on LED", Toast.LENGTH_SHORT).show(); 
    if(v.getId() == R.id.btn1){
    //define a new Intent for the second Activity
    Intent intent = new Intent(MainActivity.this,NewClass1.class);
    //start the second Activity
    MainActivity.this.startActivity(intent);
  }}
});

btn2.setOnClickListener(new OnClickListener() {
  public void onClick(View v) {
    //btn2.setEnabled(false);  
    mConnectedThread.write("1");    //Send "1" via Bluetooth
    if(v.getId() == R.id.btn2){
        //define a new Intent for the second Activity
        Intent intent = new Intent(MainActivity.this,NewClass2.class);
        //start the second Activity
        MainActivity.this.startActivity(intent);
  }}
});

btn3.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
    //btn3.setEnabled(false);  
    mConnectedThread.write("2");    //Send "2" via Bluetooth
    if(v.getId() == R.id.btn3){
        //define a new Intent for the second Activity
        Intent intent = new Intent(MainActivity.this,NewClass3.class);
        //start the second Activity
        MainActivity.this.startActivity(intent);
  }}
  });

btn4.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
    //btn4.setEnabled(false);  
    mConnectedThread.write("3");    //Send "3" via Bluetooth          
    if(v.getId() == R.id.btn4){
        //define a new Intent for the second Activity
        Intent intent = new Intent(MainActivity.this,NewClass4.class);
        //start the second Activity
        MainActivity.this.startActivity(intent);
  }}
  });
  }



  @Override
  public void onResume() {
super.onResume();

Log.d(TAG, "...onResume - try connect...");

//Set up a pointer to the remote node using it's address.
BluetoothDevice device = btAdapter.getRemoteDevice(address);

//Two things are needed to make a connection:
//  A MAC address, which we got above.
//  A Service ID or UUID.  In this case we are using the
//    UUID for SPP.
try {
  btSocket = device.createRfcommSocketToServiceRecord(MY_UUID);
} catch (IOException e) {
  errorExit("Fatal Error", "In onResume() and socket create failed: " + e.getMessage() + ".");
}

//Discovery is resource intensive.  Make sure it isn't going on
//when you attempt to connect and pass your message.
btAdapter.cancelDiscovery();

//Establish the connection.  This will block until it connects.
Log.d(TAG, "...Connecting...");
try {
  btSocket.connect();
  Log.d(TAG, "....Connection ok...");
} catch (IOException e) {
  try {
    btSocket.close();
  } catch (IOException e2) {
    errorExit("Fatal Error", "In onResume() and unable to close socket during connection failure" + e2.getMessage() + ".");
  }
}

//Create a data stream so we can talk to server.
Log.d(TAG, "...Create Socket...");

mConnectedThread = new ConnectedThread(btSocket);
mConnectedThread.start();
  }

  @Override
  public void onPause() {
    super.onPause();

Log.d(TAG, "...In onPause()...");

try     {
  btSocket.close();
} catch (IOException e2) {
  errorExit("Fatal Error", "In onPause() and failed to close socket." + e2.getMessage() + ".");
}
  }

  private void checkBTState() {
    //Check for Bluetooth support and then check to make sure it is turned on
    //Emulator doesn't support Bluetooth and will return null
    if(btAdapter==null) { 
      errorExit("Fatal Error", "Bluetooth not supported");
    } else {
      if (btAdapter.isEnabled()) {
        Log.d(TAG, "...Bluetooth ON...");
      } else {
        //Prompt user to turn on Bluetooth
        Intent enableBtIntent = new Intent(btAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
        Toast.makeText(getBaseContext(), "Connected!", Toast.LENGTH_SHORT).show();
      }
    }
  }

  private void errorExit(String title, String message){
    Toast.makeText(getBaseContext(), title + " - " + message, Toast.LENGTH_LONG).show();
finish();
  }

  private class ConnectedThread extends Thread {
    private final BluetoothSocket mmSocket;
    private final InputStream mmInStream;
    private final OutputStream mmOutStream;

    public ConnectedThread(BluetoothSocket socket) {
        mmSocket = socket;
        InputStream tmpIn = null;
        OutputStream tmpOut = null;

        //Get the input and output streams, using temp objects because
        //member streams are final
        try {
            tmpIn = socket.getInputStream();
            tmpOut = socket.getOutputStream();
        } catch (IOException e) { }

        mmInStream = tmpIn;
        mmOutStream = tmpOut;
    }

    public void run() {
        byte[] buffer = new byte[256];  //buffer store for the stream
        int bytes; //bytes returned from read()

        //Keep listening to the InputStream until an exception occurs
        while (true) {
            try {
                //Read from the InputStream
                bytes = mmInStream.read(buffer);        //Get number of bytes and message in "buffer"
                h.obtainMessage(RECIEVE_MESSAGE, bytes, -1, buffer).sendToTarget();     //Send to message queue Handler
            } catch (IOException e) {

                break;
            }
        }
    }

    /* Call this from the main activity to send data to the remote device */
    public void write(String message) {
        Log.d(TAG, "...Data to send: " + message + "...");
        byte[] msgBuffer = message.getBytes();
        try {
            mmOutStream.write(msgBuffer);
        } catch (IOException e) {
            Log.d(TAG, "...Error data send: " + e.getMessage() + "...");     
          }
    }

    /* Call this from the main activity to shutdown the connection */
    public void cancel() {
        try {
            mmSocket.close();
        } catch (IOException e) { }
    }
}

}

Und activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:keepScreenOn="true" >


<TextView
    android:id="@+id/txtArduino"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:text="" />

<Button
    android:id="@+id/btn1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/txtArduino"
    android:text="@string/btn_1" />

<Button
    android:id="@+id/btn2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/btn1"
    android:text="@string/btn_2" />

<Button
    android:id="@+id/btn3"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/btn2"
    android:text="@string/btn_3" />

<Button
    android:id="@+id/btn4"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/btn3"
    android:text="@string/btn_4" />

</RelativeLayout>
Schreibe einen Kommentar