title: Receive data from Arduino bluetooth device
body: <p>I have followed this example: <a href="http://english.cxem.net/arduino/arduino5.php" rel="nofollow">http://english.cxem.net/arduino/arduino5.php</a></p>
  
  <p>I have a arduino uno board set up with a sparkfun bluetooth device. I can connect and send data from android to arduino and I see this data pop up in the serial monitor, but I can not send data from the arduino(serial monitor) and back to Android. </p>
  
  <p>I am using a ConnectThread that is started in the onResume method in the activity. This is the code for my thread:</p>
  
  <pre><code>private class ConnectedThread extends Thread {
          private final BluetoothSocket mmSocket;
          private final InputStream mmInStream;
          private final OutputStream mmOutStream;
  
          public ConnectedThread(BluetoothSocket socket) {
              Log.d("THREAD", "constructor");
              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() {
              Log.d("THREAD", "inside 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) {
                  Log.d("in loop", "waiting for data");
                  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
                      Log.d("recieve", "b " + bytes);
                  } 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) { }
          }
  
  
  
      }
  </code></pre>
  
  <p>Do I need to use a service that always waits for data since the serial monitor is only sending data when I press send? </p>
  
  <p>EDIT: Arduino code: </p>
  
  <pre><code>    #include &lt;SoftwareSerial.h&gt;  
  
  int bluetoothTx = 2;  // TX-O pin of bluetooth mate, Arduino D2
  int bluetoothRx = 3;  // RX-I pin of bluetooth mate, Arduino D3
  
  SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);
  
  void setup()
  {
    Serial.begin(9600);  // Begin the serial monitor at 9600bps
  
    bluetooth.begin(115200);  // The Bluetooth Mate defaults to 115200bps
    bluetooth.print("$$$");  // Enter command mode
    delay(100);  // Short delay, wait for the Mate to send back CMD
    bluetooth.println("U,9600,N");  // Temporarily Change the baudrate to 9600, no parity
    // 115200 can be too fast at times for NewSoftSerial to relay the data reliably
    bluetooth.begin(9600);  // Start bluetooth serial at 9600
  }
  
     void loop()
  {
    if(bluetooth.available())  // If the bluetooth sent any characters
    {
      // Send any characters the bluetooth prints to the serial monitor
      Serial.print((char)bluetooth.read());  
    }
    if(Serial.available())  // If stuff was typed in the serial monitor
    {
      char c = (char) Serial.read();
       // Send any characters the Serial monitor prints to the bluetooth
      bluetooth.print(c); 
    }
    // and loop forever and ever!
  }
  </code></pre>