title: Send Data From Arduino to Android App via Bluetooth
body: <p>Hello i can send data from android to arduino but i cant send data from arduino to android via Bluetooth on procesing i dont get any Error but I cant see anything on display of android app.. i used for blueToothSerial.print(XXX); for arduino side .. and used text(readMessage , width,heigth); for processing side. 
  Please check it out . Where is my fault ? . What am I missing ? 
  Thanks in Advance </p>
  
  <p><strong>** on arduino side**</strong></p>
  
  <pre><code>#include &lt;SoftwareSerial.h&gt;
  #include &lt;Stepper.h&gt;
  #define RxD 6 // This is the pin that the Bluetooth (BT_TX) will transmit to the Arduino (RxD)
  #define TxD 7 // This is the pin that the Bluetooth (BT_RX) will receive from the Arduino (TxD)
  #define DEBUG_ENABLED 1
  #define RELAY 4
  
  SoftwareSerial blueToothSerial(RxD, TxD);  
  int led = 9 ;
  int in1Pin = 10;
  int in2Pin = 12;
  int in3Pin = 11;
  int in4Pin = 13;
  data = 100;
  Stepper motor(512, in1Pin, in2Pin, in3Pin, in4Pin);  
  /*----------------------SETUP----------------------------*/
  void setup() { 
  
  
  
  Serial.begin(9600);//low Serial communication via USB cable to computer (if required)
  pinMode(RxD, INPUT); // Setup the Arduino to receive INPUT from the bluetooth shield on Digital Pin 6
  pinMode(TxD, OUTPUT); // Setup the Arduino to send data (OUTPUT) to the bluetooth shield on Digital Pin 7
  pinMode(13, OUTPUT); // Use onboard LED if required.
  pinMode(9,OUTPUT);
   motor.setSpeed(30);
   pinMode(RELAY,OUTPUT);
  setupBlueToothConnection(); //Used to initialise the Bluetooth shield
  
  
  } 
  
  
  /*----------------------LOOP----------------------------*/
  void loop() { 
  digitalWrite(13, LOW); //Turn off the onboard Arduino LED
  char recvChar;
  while (1) {
  if (blueToothSerial.available()) {//check if there's any data sent from the remote bluetooth shield
  recvChar = blueToothSerial.read();
  Serial.print(recvChar); // Print the character received to the Serial Monitor (if required)
  
  //If the character received = 'r' , then change the RGB led to display a RED colour
  if (recvChar=='r') {
      motor.step(300);
      digitalWrite(led,HIGH);23
  
  
  delay(500);
  
  }
  
  //If the character received = 'g' , then change the RGB led to display a GREEN colour
  if (recvChar=='g') {
    digitalWrite(led,LOW);
    motor.step(-300);
  
  
  }
  
  //If the character received = 'b' , then change the RGB led to display a BLUE colour
  if (recvChar=='b') {
  
  digitalWrite(led,HIGH);
   digitalWrite(RELAY,HIGH);
  }
  
  //If the character received = 'x' , then turn RGB led OFF
  if (recvChar=='x') {
  digitalWrite(led,LOW);
   digitalWrite(RELAY,LOW);
  }
  }
  
  //You can use the following code to deal with any information coming from the Computer (serial monitor)
  if (Serial.available()) {
  recvChar = Serial.read();
  
  //This will send value obtained (recvChar) to the phone. The value will be displayed on the phone.
  blueToothSerial.print(recvChar);
  blueToothSerial.print("burak:");
  blueToothSerial.print(data); // data which is defined begin of sketch
  
  }
  }
  } 
  
  
  
  //The following code is necessary to setup the bluetooth shield ------copy and paste----------------
  void setupBlueToothConnection()
  {
  blueToothSerial.begin(9600);// BluetoothBee BaudRate to default baud rate 38400
  blueToothSerial.print("\r\n+STWMOD=0\r\n"); //set the bluetooth work in slave mode
  blueToothSerial.print("\r\n+STNA=HC-05\r\n"); //set the bluetooth name as "SeeedBTSlave"
  blueToothSerial.print("\r\n+STOAUT=1\r\n"); // Permit Paired device to connect me
  blueToothSerial.print("\r\n+STAUTO=0\r\n"); // Auto-connection should be forbidden here
  delay(2000); // This delay is required.
  blueToothSerial.print("\r\n+INQ=1\r\n"); //make the slave bluetooth inquirable 
  Serial.println("The slave bluetooth is inquirable!");
  delay(2000); // This delay is required.
  blueToothSerial.flush();
  }
  </code></pre>
  
  <p>And i have processing sketch . </p>
  
  <p><strong>*on processing side *</strong></p>
  
  <pre><code>/* BluetoothApp1: Written by ScottC on 25 March 2013 using 
   Processing version 2.0b8
   Tested on a Samsung Galaxy SII, with Android version 2.3.4
   Android ADK - API 10 SDK platform
   Apwidgets version: r44 */
  
  import android.content.BroadcastReceiver;
  import android.content.Context;
  import android.content.Intent;
  import android.content.IntentFilter;
  import android.widget.Toast;
  import android.view.Gravity;
  import android.bluetooth.BluetoothAdapter;
  import android.bluetooth.BluetoothDevice;
  
  import java.util.UUID;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.OutputStream;
  import android.os.Handler;
  import android.os.Message;
  import android.util.Log;
  
  import android.bluetooth.BluetoothServerSocket;
  import android.bluetooth.BluetoothSocket;
  import apwidgets.*;
  public BluetoothSocket scSocket;
  
  
  //Used for the GUI**************************************
  APWidgetContainer widgetContainer; 
  APButton redButton, greenButton, blueButton, offButton,yeniButton;
  String buttonText="";
  int buttonWidth=0;
  int buttonHeight=0;
  int n=4; //number of buttons
  int gap=10; //gap between buttons
  
  boolean foundDevice=false; //When true, the screen turns green.
  boolean BTisConnected=false; //When true, the screen turns purple.
  String serverName = "ArduinoBasicsServer";
  
  // Message types used by the Handler
  public static final int MESSAGE_WRITE = 1;
  public static final int MESSAGE_READ = 2;
  String readMessage="";
  
  //Used to send bytes to the Arduino
  SendReceiveBytes sendReceiveBT=null;
  
  //Get the default Bluetooth adapter
  BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
  
  /*The startActivityForResult() within setup() launches an 
   Activity which is used to request the user to turn Bluetooth on. 
   The following onActivityResult() method is called when this 
   Activity exits. */
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   if (requestCode==0) {
   if (resultCode == RESULT_OK) {
   ToastMaster("Bluetooth simdi acildi");
   } 
   else {
   ToastMaster("Programi kullanabilmek icin Bluetoot acmalisiniz!!!");
   }
   }
  }
  
  
  /* Create a BroadcastReceiver that will later be used to 
   receive the names of Bluetooth devices in range. */
  BroadcastReceiver myDiscoverer = new myOwnBroadcastReceiver();
  
  
  /* Create a BroadcastReceiver that will later be used to
   identify if the Bluetooth device is connected */
  BroadcastReceiver checkIsConnected = new myOwnBroadcastReceiver();
  
  
  
  // The Handler that gets information back from the Socket
  private final Handler mHandler = new Handler() {
   @Override
   public void handleMessage(Message msg) {
   switch (msg.what) {
   case MESSAGE_WRITE:
   //Do something when writing
   break;
   case MESSAGE_READ:
   //Get the bytes from the msg.obj
   byte[] readBuf = (byte[]) msg.obj;
   // construct a string from the valid bytes in the buffer
   readMessage = new String(readBuf, 0, msg.arg1);
   break;
   }
   }
  };
  
  
  
  void setup() {
   orientation(LANDSCAPE);
  
   //Setup GUI********************************
   buttonWidth=((width/n)-(n*gap));
   buttonHeight=(height/2);
   widgetContainer = new APWidgetContainer(this); //create new container for widgets
   yeniButton = new APButton(700,600,(buttonWidth/2),(buttonHeight/2),"Yeni buton");
    redButton =new APButton(0,0 ,400,400, "PERDE YUKARI"); //Create a RED button
  // redButton =new APButton((buttonWidth*(n-4)+(gap*1)), gap, buttonWidth, buttonHeight, "RED"); //Create a RED button
   greenButton = new APButton((buttonWidth*(n-3)+(gap*2)), gap, buttonWidth, buttonHeight, "GREEN"); //Create a GREEN button
   blueButton = new APButton((buttonWidth*(n-2)+(gap*3)), gap, buttonWidth, buttonHeight, "BLUE"); //Create a BLUE button
   offButton = new APButton((buttonWidth*(n-1)+(gap*4)), gap, buttonWidth, buttonHeight, "OFF"); //Create a OFF button
   widgetContainer.addWidget(redButton); //place red button in container
   widgetContainer.addWidget(greenButton); //place green button in container
   widgetContainer.addWidget(blueButton);//place blue button in container
   widgetContainer.addWidget(offButton);//place off button in container
   widgetContainer.addWidget(yeniButton);
   background(0); //Start with a black background
  
  
   /*IF Bluetooth is NOT enabled, then ask user permission to enable it */
   if (!bluetooth.isEnabled()) {
   Intent requestBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
   startActivityForResult(requestBluetooth, 0);
   }
  
   /*If Bluetooth is now enabled, then register a broadcastReceiver to report any
   discovered Bluetooth devices, and then start discovering */
   if (bluetooth.isEnabled()) {
   registerReceiver(myDiscoverer, new IntentFilter(BluetoothDevice.ACTION_FOUND));
   registerReceiver(checkIsConnected, new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED));
  
   //Start bluetooth discovery if it is not doing so already
   if (!bluetooth.isDiscovering()) {
   bluetooth.startDiscovery();
   }
   }
  }
  
  
  void draw() {
   //Display a green screen if a device has been found,
   //Display a purple screen when a connection is made to the device
   if (foundDevice) {
   if (BTisConnected) {
   background(170, 50, 255); // purple screen
   }
   else {
   background(10, 255, 10); // green screen
   }
   }
  
  
   //Change the text based on the button being pressed.
   text(buttonText, 10, buttonHeight+(buttonHeight/2));
  
   //Display anything received from Arduino
   text(readMessage, 10, buttonHeight+(buttonHeight/2)+30);
  }
  
  
  
  /* This BroadcastReceiver will display discovered Bluetooth devices */
  public class myOwnBroadcastReceiver extends BroadcastReceiver {
   ConnectToBluetooth connectBT;
  
   @Override
   public void onReceive(Context context, Intent intent) {
   String action=intent.getAction();
   ToastMaster("Eylem:" + action);
  
   //Notification that BluetoothDevice is FOUND
   if (BluetoothDevice.ACTION_FOUND.equals(action)) {
   //Display the name of the discovered device
   String discoveredDeviceName = intent.getStringExtra(BluetoothDevice.EXTRA_NAME);
   ToastMaster("Bulunan Cihaz: " + discoveredDeviceName);
  
   //Display more information about the discovered device
   BluetoothDevice discoveredDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
   ToastMaster("getAddress() = " + discoveredDevice.getAddress());
   ToastMaster("getName() = " + discoveredDevice.getName());
  
   int bondyState=discoveredDevice.getBondState();
   ToastMaster("getBondState() = " + bondyState);
  
   String mybondState;
   switch(bondyState) {
   case 10: 
   mybondState="BOND_NONE";
   break;
   case 11: 
   mybondState="BOND_BONDING";
   break;
   case 12: 
   mybondState="BOND_BONDED";
   break;
   default: 
   mybondState="INVALID BOND STATE";
   break;
   }
   ToastMaster("getBondState() = " + mybondState);
  
   //Change foundDevice to true which will make the screen turn green
   foundDevice=true;
  
   //Connect to the discovered bluetooth device (SeeedBTSlave)
   if (discoveredDeviceName.equals("HC-05")) {
   ToastMaster("BAGLANIYOR!!");
   unregisterReceiver(myDiscoverer);
   connectBT = new ConnectToBluetooth(discoveredDevice);
   //Connect to the the device in a new thread
   new Thread(connectBT).start();
   }
   }
  
   //Notification if bluetooth device is connected
   if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) {
   ToastMaster("CIHAZINIZ BAGLANDI");
   int counter=0;
   while (scSocket==null) {
   //do nothing
   }
   ToastMaster("scSocket" + scSocket);
   BTisConnected=true; //turn screen purple 
   if (scSocket!=null) {
   sendReceiveBT = new SendReceiveBytes(scSocket);
   new Thread(sendReceiveBT).start();
   String red = "r";
   byte[] myByte = stringToBytesUTFCustom(red);
   sendReceiveBT.write(myByte);
   }
   }
   }
  }
  
  public static byte[] stringToBytesUTFCustom(String str) {
   char[] buffer = str.toCharArray();
   byte[] b = new byte[buffer.length &lt;&lt; 1];
   for (int i = 0; i &lt; buffer.length; i++) {
   int bpos = i &lt;&lt; 1;
   b[bpos] = (byte) ((buffer[i]&amp;0xFF00)&gt;&gt;8);
   b[bpos + 1] = (byte) (buffer[i]&amp;0x00FF);
   }
   return b;
  }
  
  public class ConnectToBluetooth implements Runnable {
   private BluetoothDevice btShield;
   private BluetoothSocket mySocket = null;
   private UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
  
   public ConnectToBluetooth(BluetoothDevice bluetoothShield) {
   btShield = bluetoothShield;
   try {
   mySocket = btShield.createRfcommSocketToServiceRecord(uuid);
   }
   catch(IOException createSocketException) {
   //Problem with creating a socket
   Log.e("ConnectToBluetooth", "Error with Socket");
   }
   }
  
   @Override
   public void run() {
   /* Cancel discovery on Bluetooth Adapter to prevent slow connection */
   bluetooth.cancelDiscovery();
  
   try {
   /*Connect to the bluetoothShield through the Socket. This will block
   until it succeeds or throws an IOException */
   mySocket.connect();
   scSocket=mySocket;
   } 
   catch (IOException connectException) {
   Log.e("ConnectToBluetooth", "Error with Socket Connection");
   try {
   mySocket.close(); //try to close the socket
   }
   catch(IOException closeException) {
   }
   return;
   }
   }
  
   // Will allow you to get the socket from this class
   public BluetoothSocket getSocket() {
   return mySocket;
   }
  
   /* Will cancel an in-progress connection, and close the socket */
   public void cancel() {
   try {
   mySocket.close();
   } 
   catch (IOException e) {
   }
   }
  }
  
  
  
  private class SendReceiveBytes implements Runnable {
   private BluetoothSocket btSocket;
   private InputStream btInputStream = null;
   ;
   private OutputStream btOutputStream = null;
   String TAG = "SendReceiveBytes";
  
   public SendReceiveBytes(BluetoothSocket socket) {
   btSocket = socket;
   try {
   btInputStream = btSocket.getInputStream();
   btOutputStream = btSocket.getOutputStream();
   } 
   catch (IOException streamError) { 
   Log.e(TAG, "Error when getting input or output Stream");
   }
   }
  
   public void run() {
   byte[] buffer = new byte[1024]; // 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 = btInputStream.read(buffer);
   // Send the obtained bytes to the UI activity
   mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer)
   .sendToTarget();
   } 
   catch (IOException e) {
   Log.e(TAG, "Error reading from btInputStream");
   break;
   }
   }
   }
  
   /* Call this from the main activity to send data to the remote device */
   public void write(byte[] bytes) {
   try {
   btOutputStream.write(bytes);
   } 
   catch (IOException e) { 
   Log.e(TAG, "Error when writing to btOutputStream");
   }
   }
  
   /* Call this from the main activity to shutdown the connection */
   public void cancel() {
   try {
   btSocket.close();
   } 
   catch (IOException e) { 
   Log.e(TAG, "Error when closing the btSocket");
   }
   }
  }
  
  
  
  /* My ToastMaster function to display a messageBox on the screen */
  void ToastMaster(String textToDisplay) {
   Toast myMessage = Toast.makeText(getApplicationContext(), 
   textToDisplay, 
   Toast.LENGTH_SHORT);
   myMessage.setGravity(Gravity.CENTER, 0, 0);
   myMessage.show();
  }
  
  
  
  
  //onClickWidget is called when a widget is clicked/touched
  void onClickWidget(APWidget widget) {
   String sendLetter = "";
  
   //Disable the previous Background colour changers
   foundDevice=false;
   BTisConnected=false;
  
   if (widget == redButton) { //if the red button was clicked
   buttonText="RED";
   background(255, 0, 0);
   sendLetter = "r";
   }
   else if (widget == greenButton) { //if the green button was clicked
   buttonText="GREEN";
   background(0, 255, 0);
   sendLetter = "g";
   }
   else if (widget == blueButton) { //if the blue button was clicked
   buttonText="BLUE";
   background(0, 0, 255);
   sendLetter = "b";
   }
   else if (widget == offButton) { //if the off button was clicked
   buttonText="OFF";
   background(0);
   sendLetter = "x";
   }
    else if (widget == yeniButton) { //if the off button was clicked
   buttonText="yeni buton";
   background(100,100,100);
   sendLetter = "y";
   }
  
   byte[] myByte = stringToBytesUTFCustom(sendLetter);
   sendReceiveBT.write(myByte);
  }
  </code></pre>