Conexión bluetooth Android con Arduino





Buenas este es el primer tutorial enlazado a mis segundo blog CursoArduinoMega.
Este tutorial consiste conectar a través de una conexión bluetooth tu dispositivo Android con el Arduino.
Vamos a enviar y recibir información.
Desde el celular Android, vamos a tener dos botones. ON OFF que van encender o apagar respectivamente
Desde el Arduino vamos a enviar 1, 2,3, 4. Ahora utilizamos estos numeros pero podría ser cualquier tipo de información como la temperatura y la humedad de un DHT11 
Todos los demás botones es puramente demostrativo que otras funcionalidades se le pueden agregar.

Fuentes: wingoodharry arduino

Configurar HC06

Comencemos con arduino
//#include "DHT.h"
//#define DHTPIN 7
//#define DHTTYPE DHT11
//DHT dht(DHTPIN, DHTTYPE);
 
int led = 13; //led Rojo de prueba de conexión

float voltageValue[4] = {0,0,0,0};
char inbyte = 0; //Char para leer el led
 
void setup() {
  // initialise serial communications at 9600 bps:
  Serial.begin(9600);
  pinMode(led, OUTPUT);
  digitalWrite(led, LOW);
  //dht.begin();
}
 
void loop() {
  getVoltageValue();
  //when serial values have been received this will be true
  
  if (Serial.available() > 0)
  {
    inbyte = Serial.read();
    Serial.println(inbyte);
    if (inbyte == '2')
    {
      digitalWrite(led, LOW); //LED off
      voltageValue[0] = 0;
    }
    if (inbyte == '1')
    {
      digitalWrite(led, HIGH); //LED on
      voltageValue[0] = 1;
    }
  }
  sendAndroidValues();
  delay(2000); 
}
 
void getVoltageValue()
{
  voltageValue[0] = 1; //led
  voltageValue[1] = 2;
  voltageValue[2] = 3;
  voltageValue[3] = 4;
  
}

//enviar los valores por el dipositivo android por el modulo Bluetooth
void sendAndroidValues()
 {
  Serial.print('#'); //hay que poner # para el comienzo de los datos, así Android sabe que empieza el String de datos
  for(int k=0; k<4; k++)
  {
    Serial.print(voltageValue[k]);
    Serial.print('+'); //separamos los datos con el +, así no es más fácil debuggear la información que enviamos
  }
 Serial.print('~'); //con esto damos a conocer la finalización del String de datos
 Serial.println();
 delay(10);        //agregamos este delay para eliminar tramisiones faltantes
}


Ahora la conexión.
Nota: En código anterior no declaramos el TX y RX (recibir e enviar información) porque vamos a usar D0 y D1. En caso contrario deberíamos declararlo como en el siguiente ejemplo (ver)
SoftwareSerial BT(10,11); //10 RX, 11 TX.

  • TXD: Transmisión de datos.
  • RXD: Recepción de datos a un voltaje de 3,3V.

Muestro dos opciones. Ambas funcionan.
Lo más importante, cual es muy fácil de equivocarse si uno trabajo apurado, rápido.
Es que 
  • el RXD hc06 va con el TX0 del arduino
  • el TXD hc06 va con el RX0 del arduino
como muestro en las imágenes



Fotos reales





Y sin mas preámbulos a los que nos interesa el código de Android

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.tatoado.ramabluewingood" >

    <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:theme="@style/AppTheme" >
        <activity
            android:name=".DeviceListActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".MainActivity"></activity>
    </application>

</manifest>

device_name.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="18sp"
    android:padding="5dp">

</TextView>

activy_main.xml (esto tiene que estar dentro de un linearlayout o relative o como gusten, para no ser muy largo solo puse lo esencial en este layout)
 <Button
    android:id="@+id/buttonOn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="LED ON" />

<Button
    android:id="@+id/buttonOff"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="LED OFF />

<TextView
    android:id="@+id/sensorView0"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
<TextView
    android:id="@+id/sensorView1
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
<TextView
    android:id="@+id/sensorView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
<TextView
    android:id="@+id/sensorView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

device_list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <TextView android:id="@+id/title_paired_devices"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Seleccione un dispositivo btSerial "
        android:visibility="gone"
        android:background="#666"
        android:textColor="#fff"
        android:paddingLeft="5dp"
    />
    <ListView android:id="@+id/paired_devices"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:stackFromBottom="false"
        android:layout_weight="1"
    />

    <TextView
        android:id="@+id/connecting"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/infoText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Si no hay dispositivos en la lista, por favor enlaza tu dispositivo en la configuración de Android"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:layout_margin="5dp"
        android:textSize="18dp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center">

    </LinearLayout>

</LinearLayout>

MainActivity.java
       

            package com.tatoado.ramabluewingood;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
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.SeekBar;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

    Button btnOn, btnOff;
    TextView txtArduino, txtString, txtStringLength, sensorView0, sensorView1, sensorView2, sensorView3;
    TextView txtSendorLDR;
    Handler bluetoothIn;

    final int handlerState = 0;             //used to identify handler message
    private BluetoothAdapter btAdapter = null;
    private BluetoothSocket btSocket = null;
    private StringBuilder recDataString = new StringBuilder();

    private ConnectedThread mConnectedThread;

    // SPP UUID service - this should work for most devices
    private static final UUID BTMODULEUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

    // String for MAC address
    private static String address = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        //Link the buttons and textViews to respective views
        btnOn = (Button) findViewById(R.id.buttonOn);
        btnOff = (Button) findViewById(R.id.buttonOff);
        txtString = (TextView) findViewById(R.id.txtString);
        txtStringLength = (TextView) findViewById(R.id.testView1);
        sensorView0 = (TextView) findViewById(R.id.sensorView0);
        sensorView1 = (TextView) findViewById(R.id.sensorView1);
        sensorView2 = (TextView) findViewById(R.id.sensorView2);
        sensorView3 = (TextView) findViewById(R.id.sensorView3);

        txtSendorLDR = (TextView) findViewById(R.id.tv_sendorldr);


        bluetoothIn = new Handler() {
            public void handleMessage(android.os.Message msg) {
                if (msg.what == handlerState) {          //if message is what we want
                    String readMessage = (String) msg.obj;                                                                // msg.arg1 = bytes from connect thread
                    recDataString.append(readMessage);              //keep appending to string until ~
                    int endOfLineIndex = recDataString.indexOf("~");                    // determine the end-of-line
                    if (endOfLineIndex > 0) {                                           // make sure there data before ~
                        String dataInPrint = recDataString.substring(0, endOfLineIndex);    // extract string
                        txtString.setText("Datos recibidos = " + dataInPrint);
                        int dataLength = dataInPrint.length();       //get length of data received
                        txtStringLength.setText("Tamaño del String = " + String.valueOf(dataLength));

                        if (recDataString.charAt(0) == '#')        //if it starts with # we know it is what we are looking for
                        {
                            String sensor0 = recDataString.substring(1, 5);             //get sensor value from string between indices 1-5
                            String sensor1 = recDataString.substring(6, 10);            //same again...
                            String sensor2 = recDataString.substring(11, 15);
                            String sensor3 = recDataString.substring(16, 20);

                            if(sensor0.equals("1.00"))
                            sensorView0.setText("Encendido"); //update the textviews with sensor values
                            else
                                sensorView0.setText("Apagado"); //update the textviews with sensor values
                            sensorView1.setText(sensor1);
                            sensorView2.setText(sensor2);
                            sensorView3.setText(sensor3);
                            //sensorView3.setText(" Sensor 3 Voltage = " + sensor3 + "V");
                        }
                        recDataString.delete(0, recDataString.length());      //clear all string data
                        // strIncom =" ";
                        dataInPrint = " ";
                    }
                }
            }
        };

        btAdapter = BluetoothAdapter.getDefaultAdapter();       // get Bluetooth adapter
        checkBTState();


        // Set up onClick listeners for buttons to send 1 or 0 to turn on/off LED
        btnOff.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                mConnectedThread.write("2");    // Send "0" via Bluetooth
                Toast.makeText(getBaseContext(), "Apagar el LED", Toast.LENGTH_SHORT).show();
            }
        });

        btnOn.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                mConnectedThread.write("1");    // Send "1" via Bluetooth
                Toast.makeText(getBaseContext(), "Encender el LED", Toast.LENGTH_SHORT).show();
            }
        });
    }


    private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws IOException {

        return  device.createRfcommSocketToServiceRecord(BTMODULEUUID);
        //creates secure outgoing connecetion with BT device using UUID
    }

    @Override
    public void onResume() {
        super.onResume();

        //Get MAC address from DeviceListActivity via intent
        Intent intent = getIntent();

        //Get the MAC address from the DeviceListActivty via EXTRA
        address = intent.getStringExtra(DeviceListActivity.EXTRA_DEVICE_ADDRESS);

        //create device and set the MAC address
        //Log.i("ramiro", "adress : " + address);
        BluetoothDevice device = btAdapter.getRemoteDevice(address);

        try {
            btSocket = createBluetoothSocket(device);
        } catch (IOException e) {
            Toast.makeText(getBaseContext(), "La creacción del Socket fallo", Toast.LENGTH_LONG).show();
        }
        // Establish the Bluetooth socket connection.
        try
        {
            btSocket.connect();
        } catch (IOException e) {
            try
            {
                btSocket.close();
            } catch (IOException e2)
            {
                //insert code to deal with this
            }
        }
        mConnectedThread = new ConnectedThread(btSocket);
        mConnectedThread.start();

        //I send a character when resuming.beginning transmission to check device is connected
        //If it is not an exception will be thrown in the write method and finish() will be called
        mConnectedThread.write("x");
    }

    @Override
    public void onPause()
    {
        super.onPause();
        try
        {
            //Don't leave Bluetooth sockets open when leaving activity
            btSocket.close();
        } catch (IOException e2) {
            //insert code to deal with this
        }
    }

    //Checks that the Android device Bluetooth is available and prompts to be turned on if off
    private void checkBTState() {

        if(btAdapter==null) {
            Toast.makeText(getBaseContext(), "El dispositivo no soporta bluetooth", Toast.LENGTH_LONG).show();
        } else {
            if (btAdapter.isEnabled()) {
            } else {
                Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                startActivityForResult(enableBtIntent, 1);
            }
        }
    }

    //create new class for connect thread
    private class ConnectedThread extends Thread {
        private final InputStream mmInStream;
        private final OutputStream mmOutStream;

        //creation of the connect thread
        public ConnectedThread(BluetoothSocket socket) {
            InputStream tmpIn = null;
            OutputStream tmpOut = null;

            try {
                //Create I/O streams for connection
                tmpIn = socket.getInputStream();
                tmpOut = socket.getOutputStream();
            } catch (IOException e) { }

            mmInStream = tmpIn;
            mmOutStream = tmpOut;
        }


        public void run() {
            byte[] buffer = new byte[256];
            int bytes;

            // Keep looping to listen for received messages
            while (true) {
                try {
                    bytes = mmInStream.read(buffer);         //read bytes from input buffer
                    String readMessage = new String(buffer, 0, bytes);
                    // Send the obtained bytes to the UI Activity via handler
                    bluetoothIn.obtainMessage(handlerState, bytes, -1, readMessage).sendToTarget();
                } catch (IOException e) {
                    break;
                }
            }
        }
        //write method
        public void write(String input) {
            byte[] msgBuffer = input.getBytes();           //converts entered String into bytes
            try {
                mmOutStream.write(msgBuffer);                //write bytes over BT connection via outstream
            } catch (IOException e) {
                //if you cannot write, close the application
                Toast.makeText(getBaseContext(), "La Conexión fallo", Toast.LENGTH_LONG).show();
                finish();

            }
        }
    }
}

DeviceListActivity.java
       

            package com.tatoado.ramabluewingood;

import java.util.Set;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
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 android.widget.AdapterView.OnItemClickListener;


public class DeviceListActivity extends Activity {
    // Debugging for LOGCAT
    private static final String TAG = "DeviceListActivity";
    private static final boolean D = true;
    
  
    // declare button for launching website and textview for connection status
    Button tlbutton;
    TextView textView1;
    
    // EXTRA string to send on to mainactivity
    public static String EXTRA_DEVICE_ADDRESS = "device_address";

    // Member fields
    private BluetoothAdapter mBtAdapter;
    private ArrayAdapter mPairedDevicesArrayAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.device_list);
    }
    
    @Override
    public void onResume() 
    {
     super.onResume();
     //*************** 
     checkBTState();

     textView1 = (TextView) findViewById(R.id.connecting);
     textView1.setTextSize(40);
     textView1.setText(" ");

     // Initialize array adapter for paired devices
     mPairedDevicesArrayAdapter = new ArrayAdapter(this, R.layout.device_name);

     // Find and set up the ListView for paired devices
     ListView pairedListView = (ListView) findViewById(R.id.paired_devices);
     pairedListView.setAdapter(mPairedDevicesArrayAdapter);
     pairedListView.setOnItemClickListener(mDeviceClickListener);

     // Get the local Bluetooth adapter
     mBtAdapter = BluetoothAdapter.getDefaultAdapter();

     // Get a set of currently paired devices and append to 'pairedDevices'
     Set pairedDevices = mBtAdapter.getBondedDevices();

     // Add previosuly paired devices to the array
     if (pairedDevices.size() > 0) {
      findViewById(R.id.title_paired_devices).setVisibility(View.VISIBLE);//make title viewable
      for (BluetoothDevice device : pairedDevices) {
       mPairedDevicesArrayAdapter.add(device.getName() + "\n" + device.getAddress());
      }
     } else {
      String noDevices = "Ningun dispositivo pudo ser emparejado";
      mPairedDevicesArrayAdapter.add(noDevices);
     }
  }

    // Set up on-click listener for the list (nicked this - unsure)
    private OnItemClickListener mDeviceClickListener = new OnItemClickListener() {
        public void onItemClick(AdapterView av, View v, int arg2, long arg3) {

         textView1.setText("Conectando...");
            // Get the device MAC address, which is the last 17 chars in the View
            String info = ((TextView) v).getText().toString();
            String address = info.substring(info.length() - 17);

            // Make an intent to start next activity while taking an extra which is the MAC address.
   Intent i = new Intent(DeviceListActivity.this, MainActivity.class);
            i.putExtra(EXTRA_DEVICE_ADDRESS, address);
   startActivity(i);   
        }
    };

    private void checkBTState() {
        // Check device has Bluetooth and that it is turned on
      mBtAdapter=BluetoothAdapter.getDefaultAdapter(); // CHECK THIS OUT THAT IT WORKS!!!
        if(mBtAdapter==null) { 
         Toast.makeText(getBaseContext(), "El dispositivo no soporta Bluetooth", Toast.LENGTH_SHORT).show();
        } else {
          if (mBtAdapter.isEnabled()) {
            Log.d(TAG, "...Bluetooth Activado...");
          } else {
            //Prompt user to turn on Bluetooth
            Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enableBtIntent, 1);
 
            }
          }
        }
}

50 comentarios:

  1. Me podrías proporcionar tu codigo?
    Apenas estoy aprendiendo en esto de android y no se muy bien de las clases

    ResponderEliminar
  2. Esta muito bom....
    5 estrelas, parabens ramiro

    ResponderEliminar
  3. la app android lo hiciste en android estudio? podrias subir el proyecto o enviarmelo en mi correo linus.kow.2012@gmail.com, aun soy nuevo en esto de la programacion y necesitava hacer una app parecida a la tuya para la universidad, te lo agradeceria bastante.

    ResponderEliminar
    Respuestas
    1. ahí esta. Arriba donde dice "github" esta todo el código de Android y Arduino.

      Eliminar
  4. muy buena acotacion porque mayor mente hacen app inventor y es limitado los estilo para hacer app, espero que publiques mas

    ResponderEliminar
  5. muy buena acotacion porque mayor mente hacen app inventor y es limitado los estilo para hacer app, espero que publiques mas

    ResponderEliminar
  6. Buenas, muy buen aporte pero me salen algunos errores en el archivo java del DeviceListActivity, me sale tres errores

    mPairedDevicesArrayAdapter = new ArrayAdapter(this, R.layout.device_name);

    En el device name y en

    String noDevices = getResources().getText(R.string.none_paired).toString();

    en el none_paired


    ResponderEliminar
  7. Respuestas
    1. https://github.com/patriotaSJ/Bluetooth.git

      Eliminar
    2. debajo de la imagen dice "download from github" le tenias que hacer click ahí, todo los tutoriales son iguales.
      Una captura
      Descarga del código
      Video explicativo
      Código

      Eliminar
  8. hola ramiro es un buen aporte lo que haces pero oye me podrás explicar un poco a detalle sobre android studio en como utilizar el bluetooth en verdad te agradeceré si me apoyas

    ResponderEliminar
  9. Genial, Me gusta mucho el blog, esto es realmente innovador!!
    Sigue asi Ramiro!!

    ResponderEliminar
  10. Hola, el tutorial esta muy bueno, parabens;;;;;;;


    Com que programa é que gravas tus videosdos tutoriais...

    Agradeco respoesta puede ser por email jose_magalhaes_1997@hotmail.com

    Obrigado...

    ResponderEliminar
  11. Hola es muy buen tutorial, si quiero mandar texto en vez de 0 y 1, quiero mandar on and off. Intente cambiarle directamente al codigo y no pasa nada :(

    ResponderEliminar
  12. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  13. Genial!!! Muy bueno!!! Gracias a tí he podido finalizar mi proyecto de automatización de mi coche ( control de alumbrado automático, control de velocidad, multimedia...) con un Arduino Mega y una tablet de 7" Android. Era mi primer proyecto con Android Studio y casi tiro la toalla. Me ha costado cambiar mi metodología de programación (antes lo hacia todo con Visual Estudio) a Java, pero gracias a este blog, se me han abierto un montón de posibilidades.
    De nuevo muchas gracias y por favor, continúa así. A ver si algún día puedo hacer algún aporte tan bueno.

    ResponderEliminar
    Respuestas
    1. fua, muchas gracias. Es el mejor comentario que me han hecho. Saludos, que bueno haber sido de ayuda.

      Eliminar
  14. Buenas Ramiro, esta super bueno el tutoríal, muchísimas gracias.
    Como podría desarrollar una aplicacion que reciba al mismo tiempo información de dos bluetooth diferentes.
    Saludos

    ResponderEliminar
  15. Buenas Ramiro

    Ante todo felicitarte y darte las gracias porque me esta sirviendo de mucha ayuda tu proyecto porque tengo que hacer una app parecida a la que has hecho.

    Tengo dos dudas que preguntarte:

    1º) El archivo device_main, que esta vacío, ¿para qué sirve?
    2º) El archivo device_name, te crea un texto con el dispositivo que ya tienes vinculado en tu dispositivo, ¿no?

    Gracias

    ResponderEliminar
    Respuestas
    1. Sirve para todo, menos para nada.

      Eliminar
    2. Si claro. La puedes enviar por wasap o por gmail.com

      Eliminar
  16. Hola Ramiro

    Me ha encantado el post y te agradezco el código ya que me sirve de mucho, sigue así.

    Tengo una duda que plantearte, ¿con tu código puedo recibir datos de forma seguida o hay que añadir algun código?

    Gracias

    ResponderEliminar
  17. Me salvaste la vida. Saludos desde Venezuela

    ResponderEliminar
  18. Excelente Muchas gracias, tengo una pregunta como se podria usar el bluetooth en un service para que se pueda recibir informacion de arduino sin necesidad de tener abierta la aplicacion

    ResponderEliminar
  19. Excelente post!! Una pregunta, como hago para implementar la conexión bluetooth en varias activities y no perder la conexion?

    ResponderEliminar
  20. excelente aporte camarada...sigue asi y gracias por compartir toda esta informacion es de gran utilidad....

    ResponderEliminar
  21. Hola Ramiro,

    el código me ha ayudado mucho para finalizar mi proyecto de carrera de control de un exoesqueleto para rehabilitación de los dedos desde un movil o tablet. Eres parte de él, asi que puedes sentirte orgulloso!

    Muchas gracias de nuevo!

    ResponderEliminar
  22. Hola saludos Soy Novato en este tema y la verdad me descargue tu codigo Android pero no logro entender la estructura q le ahs puesto yno se ejecuta Por favor si tal vez podrias hacer un video me salvarias la vida literalmente

    ResponderEliminar
  23. Genial, tendras idea de como mandar una variable? apenas estoy descubriendo Android Studio. He logrado guardar un numero con EditText pero sigo sin poderlo mandar por Bluetooth.

    ResponderEliminar
  24. Hola, necesitaria usar tu codigo para un proyecto en el que tengo que enviar un array bidimensional desde android a arduino, queria saber si con tu codigo funcionaba. No entiendo mucho de codigo de conexionado. Muchas gracias!

    ResponderEliminar
  25. Parece algo interesante, acabo de empezar a dominar Android así que todo lo que he leído me ha parecido realmente útil para hacerme una mejor idea, gracias por compartir

    ResponderEliminar
  26. Genial el laburo que te mandaste man! un saludo

    ResponderEliminar
  27. Me gusto mucho tu aporte estimado.
    Y para los que piden ayuda con temas que no son de este post o son personales: Agradezcan que alguien comparta su conocimiento y no lo presionen con pedidos fuera de lugar.
    Hay que poner de nuestro trabajo personal y ser dadores de soluciones y no de mas problemas.

    ResponderEliminar
  28. Me gusto mucho tu aporte estimado.
    Y para los que piden ayuda con temas que no son de este post o son personales: Agradezcan que alguien comparta su conocimiento y no lo presionen con pedidos fuera de lugar.
    Hay que poner de nuestro trabajo personal y ser dadores de soluciones y no de mas problemas.

    ResponderEliminar
  29. Hola amigo muy buena aportación pero podrías explicarme este método checkBTState
    estoy tratando de desglosarlo.

    ResponderEliminar
  30. El curso me parece complicad mismo siguiendo los pasos. Sin embargo para quien ya tenga una idea de programación lo verá más sencillo y fácil. De todos modos dar la enhorabuena por compartir en publico.

    ResponderEliminar
  31. Excelente video.
    La verdad me parece excelente para tu Tesis.
    Sasludos desde el Curso Enarm Virtual.

    ResponderEliminar
  32. Buenas tardes Ingeniero.

    De ante mano gracias por el tutorial, para mi ha sido muy util. Quisiera saber si me podrias resolver una duda.

    Creé una app en AndroidStrudio para hacer un switcheo on/off a una bomba de agua en un tanque de agua, en la aplicación tengo basicamente 2 botones, al boton qué me enciende la bomba le he asignado un valor de '1' y al qué me apaga la bomba le definí el valor de '0'.

    Seguidamente a estó del lado de arduino, creé una varibale con el nombre 'state',para asignar los valores qué me llegan desde la app, la variable 'state' la inicializo con el valor igual a '0', luego preguntó en un condicional "if", sí ha establecido la conexión bluetooth entre el dispositivo y el arduino, de ser afirmativa la sentencia, vuelvo a preguntar en una sentencia por el valor del botón qué se halla pulsado en la app.
    Sí el boton pulsado ha sido '1', prendo la bomba de agua, de lo contrario sí ha sido
    '0' apago la bomba. El skecth de arduino qué tengo hasta ahora para el switch on/off y la comunicación entre el celular y arduino por BT es el siguiente:

    #define WPump1_Ch1 10
    int state = 0;
    int Altura=0;
    int Diametro=0;

    void setup() {
    //Velocidad del puerto Serial
    Serial.begin (9600);
    pinMode(WPump1_Ch1, OUTPUT);//BOMBA DE AGUA
    digitalWrite(WPump1_Ch1, HIGH);
    }

    void loop() {
    if (Serial.available() > 0) {
    state = Serial.read();
    }
    if ( state == 1 ) {
    digitalWrite(WPump1_Ch1, LOW);
    }
    else if (state == 0) {
    digitalWrite(WPump1_Ch1, HIGH);
    }


    }


    Tengo una inquietud aun y quísiera saber sí me puedes ayudar a resolverla.

    al tener la bomba de agua en un recipiente cilíndrico me gustaría mostrar la capacidad del mismo en un textview en la app, para eso tendría qué crear 2 variables del lado Arduino qué me almacenen los valores de la altura y el diámetro, previamente ingresados en 2 text_box de la App de AndroidStudio, cosa qué haun no lo he logrado hacer, me gustaría saber sí esto es posible y sí me podrias explicar la forma de hacerlo, te lo agradecería enormemente.

    ResponderEliminar
  33. Hola que tal, muy buen proyecto, excelente aporte. el codigo esta muy completo.

    ResponderEliminar
  34. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  35. Muchas Gracias Bro n.n Me sirvio mucho (Solo tome lo relacioado con android) excelente trabajo Sigue Asi

    ResponderEliminar
  36. hola muy buen tutorial gracias tengo un problema cuando trato de apagar el led o encender no envia nada del android al arduino pero si recibe datos del arduino al android de antemano gracias por tu respuesta

    ResponderEliminar
  37. Hola, he cargado el proyecto y me ha hecho instalar una imagen de android nueva y unas tools, hasta ahí todo correcto. Pero al ejecutar la aplicación, la instala en el emulador pero me da el error : Unfortunately, Rama Blue Wingood has stopped. Alguna idea? Gracias

    ResponderEliminar
    Respuestas
    1. Perdón, creo que era que tengo que usarlo sobre un móvil físico y no uno virtual. Por si le sirve a alguien.

      Eliminar