This article shows two examples of working with Bluetooth:
- Send data to Arduino
- Data transfer between Android and Arduino.
Arduino
Wiring diagram is the same as in the previous article:
I use Arduino Nano V3 and Bluetooth module HC-06. I also connected the external LED to pin 12. It’s program:
char incomingByte; // incoming data int LED = 12; // LED pin void setup() { Serial.begin(9600); // initialization pinMode(LED, OUTPUT); Serial.println("Press 1 to LED ON or 0 to LED OFF..."); } void loop() { if (Serial.available() > 0) { // if the data came incomingByte = Serial.read(); // read byte if(incomingByte == '0') { digitalWrite(LED, LOW); // if 1, switch LED Off Serial.println("LED OFF. Press 1 to LED ON!"); // print message } if(incomingByte == '1') { digitalWrite(LED, HIGH); // if 0, switch LED on Serial.println("LED ON. Press 0 to LED OFF!"); } } }
Android
We use the Java code with an explicit MAC-address of the device. Find MAC-address can be in the program for Android: Bluetooth Terminal:
Our device that is “BOLUTEK” with MAC-address 00:15:FF:F2:19:4C.
The first program is very simple, the main activity contain two buttons: turn on LED and turn off LED. Data transfer in the program will be implemented only on Android devices to Arduino
It’s Java code of main activity:
package com.example.bluetooth1; import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.Method; import java.util.UUID; import com.example.bluetooth1.R; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity { private static final String TAG = "bluetooth1"; Button btnOn, btnOff; private BluetoothAdapter btAdapter = null; private BluetoothSocket btSocket = null; private OutputStream outStream = null; // 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:15:FF:F2:19:5F"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnOn = (Button) findViewById(R.id.btnOn); btnOff = (Button) findViewById(R.id.btnOff); btAdapter = BluetoothAdapter.getDefaultAdapter(); checkBTState(); btnOn.setOnClickListener(new OnClickListener() { public void onClick(View v) { sendData("1"); Toast.makeText(getBaseContext(), "Turn on LED", Toast.LENGTH_SHORT).show(); } }); btnOff.setOnClickListener(new OnClickListener() { public void onClick(View v) { sendData("0"); Toast.makeText(getBaseContext(), "Turn off LED", Toast.LENGTH_SHORT).show(); } }); } private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws IOException { if(Build.VERSION.SDK_INT >= 10){ try { final Method m = device.getClass().getMethod("createInsecureRfcommSocketToServiceRecord", new Class[] { UUID.class }); return (BluetoothSocket) m.invoke(device, MY_UUID); } catch (Exception e) { Log.e(TAG, "Could not create Insecure RFComm Connection",e); } } return device.createRfcommSocketToServiceRecord(MY_UUID); } @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 = createBluetoothSocket(device); } catch (IOException e1) { errorExit("Fatal Error", "In onResume() and socket create failed: " + e1.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..."); try { outStream = btSocket.getOutputStream(); } catch (IOException e) { errorExit("Fatal Error", "In onResume() and output stream creation failed:" + e.getMessage() + "."); } } @Override public void onPause() { super.onPause(); Log.d(TAG, "...In onPause()..."); if (outStream != null) { try { outStream.flush(); } catch (IOException e) { errorExit("Fatal Error", "In onPause() and failed to flush output stream: " + e.getMessage() + "."); } } 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 support"); } else { if (btAdapter.isEnabled()) { Log.d(TAG, "...Bluetooth ON..."); } else { //Prompt user to turn on Bluetooth Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, 1); } } } private void errorExit(String title, String message){ Toast.makeText(getBaseContext(), title + " - " + message, Toast.LENGTH_LONG).show(); finish(); } private void sendData(String message) { byte[] msgBuffer = message.getBytes(); Log.d(TAG, "...Send data: " + message + "..."); try { outStream.write(msgBuffer); } catch (IOException e) { String msg = "In onResume() and an exception occurred during write: " + e.getMessage(); if (address.equals("00:00:00:00:00:00")) msg = msg + ".\n\nUpdate your server address from 00:00:00:00:00:00 to the correct address on line 35 in the java code"; msg = msg + ".\n\nCheck that the SPP UUID: " + MY_UUID.toString() + " exists on server.\n\n"; errorExit("Fatal Error", msg); } } }
Android – transmit and receive data to the Arduino
To receive data from Arduino, in Android application we need to use threads. On the main window activity we add a new element TextView, which will be used to display the received data from the Arduino
package com.example.bluetooth2; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.Method; import java.util.UUID; import com.example.bluetooth2.R; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { private static final String TAG = "bluetooth2"; Button btnOn, btnOff; TextView txtArduino; Handler h; 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:15:FF:F2:19:5F"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnOn = (Button) findViewById(R.id.btnOn); // button LED ON btnOff = (Button) findViewById(R.id.btnOff); // button LED OFF 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: // if receive massage byte[] readBuf = (byte[]) msg.obj; String strIncom = new String(readBuf, 0, msg.arg1); // create string from bytes array 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 Arduino: " + sbprint); // update TextView btnOff.setEnabled(true); btnOn.setEnabled(true); } //Log.d(TAG, "...String:"+ sb.toString() + "Byte:" + msg.arg1 + "..."); break; } }; }; btAdapter = BluetoothAdapter.getDefaultAdapter(); // get Bluetooth adapter checkBTState(); btnOn.setOnClickListener(new OnClickListener() { public void onClick(View v) { btnOn.setEnabled(false); mConnectedThread.write("1"); // Send "1" via Bluetooth //Toast.makeText(getBaseContext(), "Turn on LED", Toast.LENGTH_SHORT).show(); } }); btnOff.setOnClickListener(new OnClickListener() { public void onClick(View v) { btnOff.setEnabled(false); mConnectedThread.write("0"); // Send "0" via Bluetooth //Toast.makeText(getBaseContext(), "Turn off LED", Toast.LENGTH_SHORT).show(); } }); } private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws IOException { if(Build.VERSION.SDK_INT >= 10){ try { final Method m = device.getClass().getMethod("createInsecureRfcommSocketToServiceRecord", new Class[] { UUID.class }); return (BluetoothSocket) m.invoke(device, MY_UUID); } catch (Exception e) { Log.e(TAG, "Could not create Insecure RFComm Connection",e); } } return device.createRfcommSocketToServiceRecord(MY_UUID); } @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 = createBluetoothSocket(device); } 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 support"); } else { if (btAdapter.isEnabled()) { Log.d(TAG, "...Bluetooth ON..."); } else { //Prompt user to turn on Bluetooth Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, 1); } } } private void errorExit(String title, String message){ Toast.makeText(getBaseContext(), title + " - " + message, Toast.LENGTH_LONG).show(); finish(); } private class ConnectedThread extends Thread { private final InputStream mmInStream; private final OutputStream mmOutStream; public ConnectedThread(BluetoothSocket 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() + "..."); } } } }
Video:
Download APK-files for Android: bluetooth1.apk and bluetooth2.apk
Download source code for Arduino and Android
thank you very much, it was just what I wanted. I used in MSP430. Greetings from Mexico 🙂
Hello there,
How would I lay out the code so that it can accept either of 5 Mac addresses (multiple products that get replaced)
i am working with arduino uno and hc 05 bt i am unable to test it.what should i change other than the mac address.plsss help
Hola, tengo un duda, en al comienzo de tu codigo utilizas el UUID, eso para que sirve? y el UUID es de mi dispositivo android o de mi modulo Bluetooth externo?
What program do I use to change the Bluetooth device address? I can load it into my Nexus 7, but it crashes since the Bluetooth device address is wrong.
I am getting the error below…
[2013-11-21 15:38:26 – Dex Loader] Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.
[2013-11-21 15:38:26 – Bluetooth1] Conversion to Dalvik format failed: Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.
it means that the target sdk is not installed or the wrong compile settings are applied
I have compiled your code everything seems to compile correctly as soon as I run it though the program crashes. Have you ever seen this behavior before?
make sure you’ve added the manifest permissions. That’s usually the reason.
So my only problem now seems to be that I get this error: Check that the SPP UUID: 00001101-0000-1000-8000-00805f9b34fb exists on server. actually this error has come up before on the comment list, I checked my MAC address and it was correct (checked it with Blue Term) I did notice that when I run the program my tablet does not connect to the RN-42. Any help with this would be great.
All that was need was putting the ADMIN permission before the BLUETOOTH permission in the manifest file and everything works great!!!!
On a physical device I always get “socket closed” and app crash. on emulator I always get “BlueTooth not supported” and app crash..
First off, thanks for sharing this, it was a great help getting started! I am relatively new to Android development and was getting the same errors as many commenters, where the app would crash on pressing a button, despite having permissions set in the manifest file, and I would get the message:
[quote]Fatal Error – In onResume() and an exception occured during write: socket closed.
Check that the SPP UUID: 0001101-0000-1000-8000-00805f9b34fb exists on server[/quote]
I am using Android 4.3 and it seems that some of the bluetooth libraries were changed around 4.2, so on line 125 where a bluetooth socket is created in onResume():
[b]btSocket = createBluetoothSocket(device);[/b]
needs to be changed to:
[b]btSocket = device.createRfcommSocketToServiceRecord(MY_UUID);[/b]
That allowed my program to work. Good luck!
Hello 😉
Thanks for nice example. App is based on Chat example if I am not wrong. My question is did you try some kinda faster communication like 100-200 or even more commands and responses per second? Or let’s say you send turn_on command and then you get reply from temperature sensor 200 times per second. I wonder how this code would perform in that situation. I noticed that some devices (Samsung for example) are sending data smoothly, but other (like Nexus :S) are sending not message after message but sometimes 2,5 or even 10 messages together. Let’s say response is 10 bytes and I got at the same moment 120 bytes together so I need to cut it. Did u experience such a thing with bluetooth and Android devices? Thanks
first this code was very helpful for me thanks a lot for your sharing 2 nd what is the difference between blue tooth 1 & 2
3 rd if i need to make a short cut in the program that make me able to decide which blue tooth i will work with thanks
Hi, i’m reciving an error en onPause() it seems that de outstream is empty and can’t fulsh() data.
Anyone has the same issue?
very much thanks to this website and to the author of the project.
bluetooth1 is working. you must set the bluetooth address correctly.
i get a hard time inputing the right address of my bt device. when i checked it in terminal it show’s like this 0000:1:30403 i don’t understand it at first i thought it was like this 00:00:01:30:40:03
but the correct address 00:00:01:03:40:03
bluetooth2 i this is also working but it has a little bug for me. when i click the on & off button it stay in press mode. you need to rotate the screen before it changes in unpress mode
Hello, I have the same problem. Did you figure out how to fix it and allow the button to release after being pushed?
tried to compile the code, but the auto generated com.example.bluetooth1.R.java file is missing. The attachment provided by you doesn’t contain this file. As such some error prevails. Please suggest a solution. Thanks in advance.
i encounter this problem always in res library
sometimes i forgot to put correct id or the
draw-able file. png files only working for me with small letters
Same as how you have change your first line of code:
package com.example.bluetooth1;
to your own package name,
package com.example.yourAppName;
you must do the same for line 8(first app) or 9(second app):
import com.example.bluetooth1.R;
to
import com.example.yourAppName.R;
Hi thanks for the example code! I managed to establish connection between the android phone and the Bluetooth remote device but could not send data from the phone to the device. What is lacking and what is the main purpose of the handler in the code?
im use android gingerbread 2.3.6 and i have error message “[COLOR=Red]In on Resume() and an exception occurred during write: socked closed.
check that SPP UUID:00001101-0000-1000-8000-00805F9B34FB exists on server[/COLOR]”
how should I solve the above is problem?… please help me
Thanks for the great tutorial! I had the example running in no time and minutes later I created my own app to display data streaming from my arduino. Thank you!
did u displayed the data streaming in android?
Hi, when I run this on my device (4.2.2) the program immediately crashes saying “Unfortunately, Bluetooth2 has stopped”. My device is Bluetooth enabled (have used the Bluetooth before on it) and both Bluetooth permissions are included in the build.
Does this have something to do with
“private BluetoothAdapter btAdapter = null;”
hiee i am also facing the same problem ree..i tried running it my andorid phone it jst shows the message unfortunately bluetooth 2 has stopped working..if u found a solution please let me knee..please
Hi.
Thank you for your good example.
I have a question.
can i use this code for transfer data between two mobile with o.s Android?or it only work with Arduino?
What should be modified if I wanted to send characters to the Arduino – for more than 10 commands.
Thanks,
Andrei
by the way, Digilent ChipKIT Max32 can be used instead of Arduino. BT HC-06 talks on Serial1 port of Max32. thats all.
Same error
Fatal Error – In onResume() and an exception occured during write: socket closed.
Check that the SPP UUID: 0001101-0000-1000-8000-00805f9b34fb exists on server
Hi grum,
Thanking you u done good job.God bless you :like:
sir, are you using Eclipse IDE or Processing IDE?
Firstly thank you very much for posting this example code. It has been very helpful.
Secondly, I have a problem appending data in the handler. Maybe a race condition, or buffer clear issue as it will occasionally skip information or display it wrong. My small modification to your code basically removes endOfLineIndex and continually appends data but I get the following example output:
[quote]
trimpot = 166
trimpot = 167
trimpot = 166
trimpot =
6
trimpot = 163
trimpot = 6
rrimpot =
6
t
62 ot =
62
trimpot =
66[/quote]
I notice the issue with your original code (BTW I am not using Arduino but my microcontroller works fine with BlueTerm). Is this a known issue? I cannot see anything wrong with your code, but I am very new to Android. Help appreciated!
M
Further to my previous comment, it appears that the code receives the data perfectly according to output log in Eclipse. The issue is transferring the data to the handler.
Hello once again. I solved my problem by appending data in thread, not handler. I see now that the handler can be delayed and simply miss data, or even start to display existing data while thread is overwriting it. I still call the handler each time data is received simply to tell it to send text to gui.
Hello brother,
for the most part I understand your code and the setup. But very strange things happen to my experiment… Only if I switch RX/TX at one device I will be able to use your code.
Do you know why this happens?
Thank you so much, your tutorials are quiet perfect. 🙂
Hello,
now I found a solution to display values (e.g. from a sensor) at the droids screen in a proper way.
Just “take” the system-time in onCreate (or elsewhere) and update your screen at fixed rate. I called my variable “oneTick”, see down below.
Hope this will help others 🙂
code:
if ((oneTick + 300) < System.currentTimeMillis()) {
oneTick = System.currentTimeMillis();
textViewAlcValues.setText(“Data: ” + sbprint); // update TextView
}
can you give me the full source code fo your program?
i need to display also values on android from arduino.
can you? please i really need it to my design project thanks a lot
Thank you very much!!
Only, I need to use SoftwareSerial library… so instead of using Serial.println(“bla bla bla”), I us bluetooth.print(“bla bla bla”), into my Arduino mega 2560 sketch. So android doesn’t receive the Arduino message. Instead, the opposite works(commands to Arduino). Do you have any suggestion?
Thanks a lot!! 😀
Hi….
I have used this code in one of my programs and i find that when i open the app without enabling bluetooth, there is a prompt to turn on bluetooth. However the app crashes without waiting for the bluetooth to turn on. However i dont face any issues when i run the app after turning on bluetooth. Any help regarding this is appreciated.
Did you add the permission in manifest ?
How to set baud rate on android side ? On arduino side, you have chosen 9600 baud rate for UART but where we set the baud rate in android side, in case we want higher rate of data transmission.
Thanks for your tutorial 🙂 .
HI everyone !
– How to know this decree and where all numbers
private static final UUID MY_UUID = UUID.fromString(“00001101-0000-1000-8000-00805F9B34FB”);
—–thank you
Hello Master… How Setting AT Command Bluetooth HC05 that data from arduino can received for android? please help me …thanks
Hi Admin… I am using Bluetooth HC05, i have problem for transfer data from android device:
im click button “LED ON” and i have message Toast “Turn on LED” but LED on arduino off
please help me
Works Great !
i have tested the receiving string part
w/ HC05 WBee Module + shield + Uno , compiled on Android Studio , Android Ver 5.0.1
Many Thanks !
Hello! Could you send me your Android Studio project, please?
I don’t use Android Studio. I use Eclipse
Could you send me your project, please?
Hi
I have questio if anyone can help me i need to do my Arduino UNO work wirelessly by using RN-171 WIFI shield and get the voltage of my circuit. anyone has idea how to code it?
Hey admin!
I got the problem with my app that is done according to your guide
Fatal error-In resume() and an exception occurred during write:socket closed
Check that the SPP UUID
00001101-0000-1000-8000-00805f9b34fb exists on sever
What is this problem and how to solve it
Thanks!
I’m getting this problem too, please help 🙂
Found any solution to that?
Now we are developing a new Android-application, which will be fixed all errors.
thx for this. but how i can receive temperature from arduino ?
I want to send the sensor data from arduino to android using bluetooth, so what will be the android code for this..?? please help… 🙁
Hello, How do I import the source code into Android Studio from the .APK you’ve provided? I was able to successfully install the APK to my Android device, but I need to change the MAC address for the bluetooth module in order for the code to work. Thanks.
“Unfortunately the app has crashed” i am getting this error as i open the app
At present we working on a new version of the application. It will be fix all communication errors.
Good job…. I have a ´problem, the app sends data from android to arduino, but it doesn’t receive anything in android…What’s wrong?
See your application logs and watchpoints
Can anyone send the link of there android project, every time a try to create this project it fails, showing too many error ,please help
Link of source codes is bellow the article
how this code will be modified if we want to make a app that will perform sliding operation on input of data from bluetooth module
You mean fade?
Got a problem with receiving the data properly. I’m sending the data from my microcontroller to the android app. But the data that is received is cut in to two at different point.
I’m logging the data directly after it is received.
I tried to send data once per second but here it still happens. I’m sending the word “Testing” and it will be cut mostly at “T” and the “esting”, sometimes on other places. Might be the bluetooth module that delays the transfer?
This code is not used to transmit multiple bytes (characters). You need to use the start and stop bits. See the project CxemCar for example
i tried to build an app for my arduino projects, I get the code of write(). but i can not read from arduino because the write() code is very simple but i didn’t understand the read() code ….. I want the cod for getting data from arduino and showing that as a text.
please help me
You are Best……