Arduino Droid
Arduino Droid
Página 2 de 6
En el desarrollo del proyecto indique como iniciar el mismo creando una "empty activity" y esto
lo hice ya que con la misma se crea un proyecto desde cero y podría haber utilizado alguna otra
plantilla por defecto pero sino posees los conocimientos necesarios en andriod el código inicial
que se agrega al seleccionar las otras plantillas puede confundirte así que opte en que sea lo más
simple posible y agregando solo los controles necesarios.
También opte por utilizar un RelativeLayout en ves del inicial ConstraintLayout esto es para
facilitar la adición de los controles ya que si desea puedes utilizar el ConstraintLayout pero la
alineación de los mismos podría darte inconvenientes que se resuelven en la parte del diseño y
el vídeo tutorial esta enfocado en el desarrollo del código, él diseño lo mejoráras luego y en
realidad debes de hacerlo porque el éxito de una aplicación no solo esta en la funcionalidad de
la misma sino también en que el diseño sea agradable, mencionado esto iniciemos con el código:
Inicialmente al crear el proyecto el mismo en las clases inicia con un código que posee dos
librerías,
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
@Override
setContentView(R.layout.activity_dispositivos_bt);
Algo a mencionar y que considero que debes de conocer es que una actividad "Activity" tiene un
ciclo de vida y constantemente se crean y destruyen actividades por lo cual es necesario conocer
cual es su ciclo de vida para presentar, salvar o inicializar la información. Así que cuando se hace
un llamado a una actividad internamente se hace un llamado por orden a varios metodos los
cuales son:
onCreate
onStart
onResume
y cuando sales de la actividad se hace el llamado por orden a estos otros metodos:
onPause
onStop
onDestroy
Indicare un ejemplo para que quede claro, cuando abres una aplicación desde tu dispositivo, el
mismo inicia con un llamado a OnCreate y luego continua con los metodos onStart y OnResume,
dependiendo de esto se decide que información presentar o inicializar. Por otra parte cuando
cambias de una aplicación a otra se da lugar a los eventos onPause, onStop y onDestroy, y el
momento de este llamado es ideal para guardar información, todo depende del funcionamiento
de la aplicación. En el desarrollo del código utilice el llamado a estos metodos así que ahora ya
conoces un poco más del porque se implemento el mismo.
02 Metodos
Figura 02: Ciclo de vida
03 Manifest
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.innovadomotics.controlbt">
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".DispositivosBT">
<intent-filter>
</intent-filter>
</activity>
<activity android:name=".UserInterfaz"></activity>
</application>
</manifest>
Finalmente una vez explicado lo anterior indico el código del la clase DispositivosBT.
package com.innovadomotics.controlbt;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.Set;
//1)
// Depuración de LOGCAT
private static final String TAG = "DispositivosBT"; //<-<- PARTE A MODIFICAR >->->
// Declaracion de ListView
ListView IdLista;
// Declaracion de campos
@Override
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dispositivos_bt);
@Override
public void onResume()
super.onResume();
//---------------------------------
VerificarEstadoBT();
IdLista.setAdapter(mPairedDevicesArrayAdapter);
IdLista.setOnItemClickListener(mDeviceClickListener);
mBtAdapter = BluetoothAdapter.getDefaultAdapter();
//------------------------------------------------------------------------------
if (pairedDevices.size() > 0)
// Obtener la dirección MAC del dispositivo, que son los últimos 17 caracteres en la vista
i.putExtra(EXTRA_DEVICE_ADDRESS, address);
startActivity(i);
};
private void VerificarEstadoBT() {
mBtAdapter= BluetoothAdapter.getDefaultAdapter();
if(mBtAdapter==null) {
} else {
if (mBtAdapter.isEnabled()) {
} else {
startActivityForResult(enableBtIntent, 1);
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;
//1)
Button IdEncender, IdApagar,IdDesconectar;
TextView IdBufferIn;
//-------------------------------------------
Handler bluetoothIn;
//-------------------------------------------
@Override
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_interfaz);
//2)
if (msg.what == handlerState) {
DataStringIN.append(readMessage);
if (endOfLineIndex > 0) {
DataStringIN.delete(0, DataStringIN.length());
};
VerificarEstadoBT();
// el evento de Click
IdEncender.setOnClickListener(new View.OnClickListener() {
public void onClick(View v)
MyConexionBT.write("1");
});
IdApagar.setOnClickListener(new View.OnClickListener() {
MyConexionBT.write("0");
});
IdDesconectar.setOnClickListener(new View.OnClickListener() {
if (btSocket!=null)
try {btSocket.close();}
catch (IOException e)
finish();
});
}
private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws IOException
return device.createRfcommSocketToServiceRecord(BTMODULEUUID);
@Override
super.onResume();
try
btSocket = createBluetoothSocket(device);
} catch (IOException e) {
}
// Establece la conexión con el socket Bluetooth.
try
btSocket.connect();
} catch (IOException e) {
try {
btSocket.close();
MyConexionBT.start();
@Override
super.onPause();
try
btSocket.close();
//Comprueba que el dispositivo Bluetooth Bluetooth está disponible y solicita que se active si
está desactivado
private void VerificarEstadoBT() {
if(btAdapter==null) {
} else {
if (btAdapter.isEnabled()) {
} else {
startActivityForResult(enableBtIntent, 1);
try
{
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
} catch (IOException e) { }
mmInStream = tmpIn;
mmOutStream = tmpOut;
int bytes;
while (true) {
try {
bytes = mmInStream.read(buffer);
} catch (IOException e) {
break;
//Envio de trama
public void write(String input)
try {
mmOutStream.write(input.getBytes());
catch (IOException e)
finish();
04 ArduinoBT
Para la conexión mediante Arduino he utilizado el Modulo Bluetooth HC-05 y en este caso si
recién lo has adquirido y como solo estamos testeando no lo he configurado con un nombre y
contraseña personalizada, sino que utilice sus configuraciones de fabrica y es por esto es que el
nombre del mismo es AQ y la contraseña por defecto es 1234. También en el vídeo desconecte
un momento el Pin0 para grabar porque estaba utilizando el puerto serial por defecto que tiene
Arduino y cuando se utiliza el mismo es necesario desconectar el Pin 0 - RX pero el siguiente
código utiliza el SofwareSerial y podrás omitir ese paso. Si posees el módulo Bluetooth HC-06
tambien te será de utilidad.
#include <SoftwareSerial.h>
void setup()
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
ModBluetooth.begin(9600);
Serial.begin(9600);
ModBluetooth.println("MODULO CONECTADO");
ModBluetooth.print("#");
void loop()
if (ModBluetooth.available())
char VarChar;
VarChar = ModBluetooth.read();
if(VarChar == '1')
digitalWrite(13, HIGH);
delay(100);
ModBluetooth.print("LED ENCENDIDO");
Serial.print("LED ENCENDIDO");
ModBluetooth.print("#");
if(VarChar == '0')
digitalWrite(13, LOW);
delay(100);
ModBluetooth.print("LED APAGADO#");
Serial.print("LED APAGADO#");
<pre>
<font color="#000000">{</font>
<font color="#000000">}</font>
<font color="#000000">{</font>
<font color="#000000">{</font>
<b><font color="#d35400">Serial</font></b><font
color="#434f54">.</font><font color="#d35400">println</font><font
color="#000000">(</font><font color="#005c5f">"---"</font><font
color="#000000">)</font><font color="#000000">;</font>
<font color="#000000">}</font>
<font color="#5e6d03">else</font>
<font color="#000000">{</font>
<b><font color="#d35400">Serial</font></b><font
color="#434f54">.</font><font color="#d35400">print</font><font
color="#000000">(</font><font color="#000000">distancia</font><font
color="#000000">)</font><font color="#000000">;</font>
<b><font color="#d35400">Serial</font></b><font
color="#434f54">.</font><font color="#d35400">print</font><font
color="#000000">(</font><font color="#005c5f">"cm"</font><font
color="#000000">)</font><font color="#000000">;</font>
<font color="#d35400">digitalWrite</font><font
color="#000000">(</font><font color="#000000">13</font><font color="#434f54">,</font>
<font color="#000000">0</font><font color="#000000">)</font><font
color="#000000">;</font>
<font color="#000000">}</font>
<font color="#000000">{</font>
<font color="#d35400">digitalWrite</font><font
color="#000000">(</font><font color="#000000">13</font><font color="#434f54">,</font>
<font color="#000000">1</font><font color="#000000">)</font><font
color="#000000">;</font>
<b><font color="#d35400">Serial</font></b><font
color="#434f54">.</font><font color="#d35400">println</font><font
color="#000000">(</font><font color="#005c5f">"Alarma....."</font><font
color="#000000">)</font><font color="#000000">;</font>
<font color="#000000">}</font>
<font color="#000000">{</font>
<font color="#000000">{</font>
<font color="#d35400">digitalWrite</font><font
color="#000000">(</font><font color="#000000">13</font><font color="#434f54">,</font>
<font color="#00979c">HIGH</font><font color="#000000">)</font><font
color="#000000">;</font>
<font color="#d35400">delay</font><font
color="#000000">(</font><font color="#000000">100</font><font
color="#000000">)</font><font color="#000000">;</font>
<font color="#000000">ModBluetooth</font><font
color="#434f54">.</font><font color="#d35400">print</font><font
color="#000000">(</font><font color="#005c5f">"LED ENCENDIDO"</font><font
color="#000000">)</font><font color="#000000">;</font>
<b><font color="#d35400">Serial</font></b><font
color="#434f54">.</font><font color="#d35400">print</font><font
color="#000000">(</font><font color="#005c5f">"LED ENCENDIDO"</font><font
color="#000000">)</font><font color="#000000">;</font>
<font color="#000000">ModBluetooth</font><font
color="#434f54">.</font><font color="#d35400">print</font><font
color="#000000">(</font><font color="#005c5f">"#"</font><font
color="#000000">)</font><font color="#000000">;</font>
<font color="#000000">}</font>
<font color="#000000">{</font>
<font color="#d35400">digitalWrite</font><font
color="#000000">(</font><font color="#000000">13</font><font color="#434f54">,</font>
<font color="#00979c">LOW</font><font color="#000000">)</font><font
color="#000000">;</font>
<font color="#d35400">delay</font><font
color="#000000">(</font><font color="#000000">100</font><font
color="#000000">)</font><font color="#000000">;</font>
<font color="#000000">ModBluetooth</font><font
color="#434f54">.</font><font color="#d35400">print</font><font
color="#000000">(</font><font color="#005c5f">"LED APAGADO#"</font><font
color="#000000">)</font><font color="#000000">;</font>
<b><font color="#d35400">Serial</font></b><font
color="#434f54">.</font><font color="#d35400">print</font><font
color="#000000">(</font><font color="#005c5f">"LED APAGADO#"</font><font
color="#000000">)</font><font color="#000000">;</font>
<font color="#000000">}</font>
<font color="#000000">}</font>
<font color="#000000">}</font>
</pre>