Introduction: App for Mobile Control LED(Arduino+Bluetooth Module)

Hello,

In this i will explain how to code for Android app in Android Studio.

For Arduino code and circuit, refer...

https://www.instructables.com/id/Mobile-Control-LEDAndroidBluetooth

Step 1: Creating New Project(LED Control)

Download Android Studio, install and open it

  • create new project.-name LED Control
  • Select minimum SDK to target
  • create blank activity named list

Step 2: Design the List Activity

Now design list activity as shown in fig. above.

Or directly copy the code in Text from the file provided in last.

Step 3: Coding for List Activity

package com.example.kulwinder.ledcontrol;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.Set;
public class list extends AppCompatActivity {
ListView list;
Button paired;
    private BluetoothAdapter adapter = null;//Represents the local device Bluetooth adapter
    private Set paireddevices;
    public static String EXTRA_ADDRESS = "device_address";//use to store MAC address of connected device
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);
        //Calling the widgets
        paired = (Button) findViewById(R.id.paired);
        list = (ListView) findViewById(R.id.listView);
        //if the device has bluetooth
        adapter = BluetoothAdapter.getDefaultAdapter();
        if (adapter == null) {
            //if no adapter/device availabe
            Toast.makeText(getApplicationContext(), "No Bluetooth Device available", Toast.LENGTH_LONG).show();
            finish();
        } else if (!adapter.isEnabled())//if adapter is available
        {
            //Ask to the user for turning on the bluetooth
            Intent i1 = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);//intent use for to atrat new activity
            startActivityForResult(i1, 1);
        }
        paired.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                pairedDevicesList();//call function
            }
        });
    }
    //function
    private void pairedDevicesList() {
        /*Once you have the local adapter, you can get a set of BluetoothDevice objects
        representing all paired devices with getBondedDevices() */
        paireddevices = adapter.getBondedDevices();
        ArrayList alist = new ArrayList();
        if (paireddevices.size() > 0) //if paired devices are there
        {
            for (BluetoothDevice bt : paireddevices)
            {
                alist.add(bt.getName() + "\n" + bt.getAddress()); //Get the device name and the address
            }
        }
        else
        {
            Toast.makeText(getApplicationContext(), "No Paired Bluetooth Devices Found.", Toast.LENGTH_LONG).show();
        }
// to show a vertical list of scrollable items we will use a ListView which has data populated using an Adapter
        /*
        The ArrayAdapter requires a declaration of the type of the item to be converted to a
        View (a String in this case) and then accepts three arguments: context (activity instance),
        XML item layout, and the array of data. Note that we've chosen simple_list_item_1.xml
        which is a simple TextView as the layout for each of the items.
         */
        final ArrayAdapter adapter1 = new ArrayAdapter(this, android.R.layout.simple_list_item_1, alist);
        list.setAdapter(adapter1);
        list.setOnItemClickListener(myListClickListener); //Method called when the device from the list is clicked
    }
    private AdapterView.OnItemClickListener myListClickListener = new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView

Step 4: Design Led Activity

Procedure for new empty Activity shown in fig.

Design led activity as shown in fig.

Step 5: Code Led Activity

package com.example.kulwinder.ledcontrol;
import android.app.ProgressDialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;import java.util.UUID;
public class LED extends AppCompatActivity {
    Button on, off, discon, exit;
    SeekBar brightness;
    TextView value;
    String address=null;
    private ProgressDialog progress;//Progress bars are used to show progress of a task.
    BluetoothAdapter adapter=null;//Represents the local device Bluetooth adapter
    BluetoothSocket socket=null;//socket is an endpoint for communication between two machine
    private boolean isBtConnected=false;
    static final UUID myuuid=UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
/*the uuid is used for uniquely identifying information. it identifies a particular service
   provided by a Bluetooth Device
    */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_led);//this view our activity
        Intent newint = getIntent();
        /*for receivig data d=from another activity....Here we recieve address of selected paired device
        from list activity
        */
        address = newint.getStringExtra(list.EXTRA_ADDRESS);
        //calling the widgets
        on= (Button) findViewById(R.id.onbt);
        off= (Button) findViewById(R.id.offbt);
        discon= (Button) findViewById(R.id.disconnectbt);
        exit= (Button) findViewById(R.id.backbt);
        value= (TextView) findViewById(R.id.value);
        brightness= (SeekBar) findViewById(R.id.brightsb);
        new connectbluetooth().execute();//calling function to connect
        //functions of buttons on CLICK
        on.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onled();//callinf onled function on click of on button
            }
        });
        off.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                offled();
            }
        });
        discon.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                disconnect();
            }
        });
        exit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {  System.exit(0);
        brightness.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                if(fromUser==true)//(fromUser)=callback that notifies client when the progress level has been changed
                {
                    value.setText(String.valueOf(progress));//print seekbar value to text field-value
                    try
                    {
                        socket.getOutputStream().write(String.valueOf(progress).getBytes());
                        //send value of progress to bluetooth socket and socket send it to bluetooth module
                    }
                    catch(IOException e)
                    {

}
} }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {  }
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) { }

}); }

    private void message(String a)
    {
        Toast.makeText(getApplicationContext(),a, Toast.LENGTH_LONG).show();
        //display the message on screen for 3.5 sec
    }
    private void onled()
    {
        if (socket!=null)
        {
            try
            {
                socket.getOutputStream().write("on".toString().getBytes());
                //send "on" to bluetooth module
            }
            catch (IOException e)
            {
                message("Error");
                //send string s="Error"to message function
            }
        }
    }
    private void offled()
    {
        if (socket!=null)
        {
            try
            {
                socket.getOutputStream().write("off".toString().getBytes());
                //send "off" to bluetooth module
            }
            catch (IOException e)
            {
                message("Error");
                //send string s="Error"to message function
            }
        }
    }
    private void disconnect()
    {
        if (socket!=null)
        {
            try
            {
                socket.close();
            }
            catch (IOException e)
            {
                message("Error");
                //send string s="Error"to message function
            }
        }
        finish();
    }
//An asynchronous task is defined by a computation that runs on a background thread and whose result is published on the UI thread.
    private class connectbluetooth extends AsyncTask
    {
        private boolean ConnectSuccess = true;
        @Override
        protected void onPreExecute()
        {
            progress = ProgressDialog.show(LED.this, "Connecting...", "Please wait!!!");  //show a progress of connection
        }
        @Override
        protected Void doInBackground(Void... devices) //while the progress dialog is shown, the connection is done in background
        {
            try
            {
                if (socket == null || !isBtConnected)//when bluetooth device not connected
                {
                    adapter = BluetoothAdapter.getDefaultAdapter();//get the mobile bluetooth device
                    BluetoothDevice device = adapter.getRemoteDevice(address);//connects to the device's address and checks if it's available
                    socket = device.createInsecureRfcommSocketToServiceRecord(myuuid);//create a RFCOMM (SPP) connection
                    BluetoothAdapter.getDefaultAdapter().cancelDiscovery();//it ask for permission...so add it
                    socket.connect();//start connection
                }
            }
            catch (IOException e)
            {
                ConnectSuccess = false;//if the connection try failed, you can check the exception here
            }
            return null;
        }
        @Override
        protected void onPostExecute(Void result) //after the doInBackground, it checks if everything went fine
        {
            super.onPostExecute(result);
            if (!ConnectSuccess)
            {
                message("Connection Failed. Try again.");
                finish();
            }
            else
            {
                message("Connected.");
                isBtConnected = true;
            }
            progress.dismiss();//close progress bar i.e. working
        }
    }
}

Step 6: Creating Apk

Now create apk for the app->

for this go to Build->Build apk

now install the app and enjoy controlling led through mobile.

you can download whole Android file from the link:

https://drive.google.com/open?id=0B4eY-jcXDOueX0M5WFktZHdLQ2s

If any queries feel free to write.

thank you!

Comments

author
abhijeet29 (author)2017-05-23

Is List Activity code not complete?

private AdapterView.OnItemClickListener myListClickListener = new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView..........

author
SalemA19 (author)2017-02-16

I have proplem. When i prece on the BT list give me error

Screenshot_٢٠١٧٠٢١٦-١٩٢٨١٧.png

About This Instructable

1,357views

8favorites

License:

Bio: Likes to build circuits, electronics project in free time... Also love coding...have knowledge of JAVA, C, C++, Arduino, HTML, Android Studio, LabView, CoDeSys, OrCAD.....
More by Kitu Singh:Simple Home Automation With Android AppSmart Solar LampMobile control LED(Arduino+Bluetooth module)
Add instructable to: