App inventor 2 en español
Cómo programar los teléfonos móviles con Android.
Bluetooth, Arduino y App inventor 2 - Juan Antonio Villalpando
-- Tutorial de iniciación de App Inventor 2 en español --
Volver al índice del tutorial
___________________________
- Vamos a ver distintas formas de enviar datos desde el componente Deslizador (Slider) móvil al Arduino mediante Bluetooth.
- Esto ya lo vimos en tutoriales anteriores.
----------------------------------------------------------------------------------------------------------------------------------------------------------
1.-
9G.- App inventor, Bluetooth, Arduino y Deslizador. Slider. Dimmer.
En ese tutorial teníamos un Deslizador (Slider) y mediante el bloque EnviarNúmero1Byte, envíabamos un byte al Arduino mediante un Deslizador.
Observa que en ese tutorial el módulo Bluetooth está conectado a los terminales 10 y 11 del Arduino, por eso debemos incluir la libería <SoftwareSerial>
#include <SoftwareSerial.h>
SoftwareSerial BT(10, 11);
----------------------------------------------------------------------------------------------------------------------------------------------------------
2.-
9G.- Bluetooh y Arduino. Bluetooth. Diodo tricolor. Sensor de ultrasonido. Arduino a móvil.
41B.- El móvil envía tres valores y el Arduino controla un LED tricolor.
En ese tutorial, tenemos un ejemplo de enviar tres datos mediante tres Deslizadores.
El módulo Bluetooth está conectado a los terminales RX y TX de Arduino, por eso no necesita la librería <SoftwareSerial.h>
En ese ejempo se envía tres valores, de manera que se formatean para que siempre ocupe 3 cifras cada valor, es decir si queremos enviar:
Si el número es 7, le ponemos 007
Si el número es 48, le ponemos 048
Si el número es 146 queda como 146
En el Proceso colores, unimos esos números: 007 048 146
El código de Arduino va obteniendo esos caracteres uno a uno, hasta llegar a los 9 y luego los trocea esos Datosleidos de tres en tres mediante subString.
----------------------------------------------------------------------------------------------------------------------------------------------------------
Colabora en el mantenimiento de esta web.
- Si te gusta este sitio web y quieres colaborar en su mantenimiento, puedes donar unos 7€ o 7$ mediante este enlace de Paypal:
- Gracias por tu colaboración. |
- Ahora vamos ver otros códigos.
_________________
1.- Enviar tres números mediante Deslizadores por Bluetooth. Arduino.
p40_movil_a_arduino_tricolor_v2.aia
_________________
- Diseño.
- El intervalo del Reloj está en 100, lo puedes modificar para hacer pruebas.
_________________
- Bloques.
__________________________________________
- Comentarios.
- Tal como está en la imagen, he utilizado un Temporizador, cada 100 milisegundos envía la información.
- Pero se podría haber realizado sin este Temporizador, quitamos este Temporizador y habilitamos el bloque ClienteBluetooth.EnviarTexto que está dentro del Procedimiento: colores.
- De esta manera se enviará información cuando cambiemos alguno de los Deslizadores.
- La información se envía de la forma: 48|19|134|*
- El asterisco es para avisarle al código de Arduino la finalización de esta palabra.
_________________________________________
- Arduino.
- Nos basaremos en este circuito.
- Si no tienes pantalla LCD, puedes observar los valores en el Monitor Serie, en este caso puedes anular las líneas correspondientes a lcd.
- Este código va recibiendo bytes hasta que llega al asterisco.
- En ese momento la palabra recibida sería: 48|19|134|*
- Comienza el troceado de los datos.
tres_valores.ino |
/* Juan Antonio Villalpando
juana1991@yahoo.com
Envío de tres valores
mediante App Inventor 2
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
char val;
String palabra;
String dato_1;
String dato_2;
String dato_3;
int k1;
int k2;
int k3;
void setup()
{
lcd.begin(16,2);// Columnas y filas de LCD
Serial.begin(9600);
}
void loop() {
if(Serial.available())
{
val = Serial.read();
palabra = palabra + val;
if (val == '*') {
Serial.println(palabra);
Serial.println();
k1 = palabra.indexOf('|');
dato_1 = palabra.substring(0, k1);
k2 = palabra.indexOf('|', k1+1);
dato_2 = palabra.substring(k1+1, k2);
k3 = palabra.indexOf('|', k2+1);
dato_3 = palabra.substring(k2+1, k3);
Serial.print("Dato_1 = ");
Serial.println(dato_1);
Serial.print("Dato_2 = ");
Serial.println(dato_2);
Serial.print("Dato_3 = ");
Serial.println(dato_3);
palabra = "";
// LCD
lcd.clear();
lcd.setCursor(0,0);
lcd.print(dato_1);
lcd.setCursor(8,0);
lcd.print(dato_2);
lcd.setCursor(0,1);
lcd.print(dato_3);
delay(1);
}
}
}
|
_________________________________________
- Comentarios.
- Este código se bloquea muchas veces cuando el móvil no tiene un buen rendimiento de Bluetooth.
- Si en vez de utilizar Deslizadores, utilizas un Botón, se bloqueará menos.
- Es decir, pones 3 CamposDeTexto, toma sus tres números y los une: 48|19|134|* y luego con un Botón los envías.
- En este tutorial ponen un flag, pero se sigue bloqueando:
https://www.element14.com/community/people/neilk/blog/2014/09/05/app-inventor-bluetooth-and-arduino-part-3-android-slider-controls-led-brightness
_________________
2.- Enviar tres números mediante el bloque: Enviar 4 Bytes.
p40_movil_a_arduino_Byte_Deslizador.aia
- En este ejemplo se envía 4 Bytes, el primero el de más peso.
si tenemos los números 34, 48 y 149 se enviará:
1 * 34 + 256 * 48 + 65536 * 149 + 0 = 9777186
- Se recibirá en el Arduino de esta manera:
unsigned int dato_1 = Serial.read(); // 0
unsigned int dato_2 = Serial.read(); // 149
unsigned int dato_3 = Serial.read(); // 48
unsigned int dato_4 = Serial.read(); // 34
- A pesar de enviar solo 4 bytes, se sigue bloqueando la aplicación.
_________________
- Diseño.
_________________
- Bloques.
_________________
- Arduino.
tres_valores_v3.ino |
/* Juan Antonio Villalpando
juana1991@yahoo.com
Envío de tres valores
mediante App Inventor 2
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
void setup()
{
lcd.begin(16,2);// Columnas y filas de LCD
Serial.begin(9600);
}
void loop() {
if(Serial.available())
{
unsigned int dato_1 = Serial.read();
unsigned int dato_2 = Serial.read();
unsigned int dato_3 = Serial.read();
unsigned int dato_4 = Serial.read();
Serial.println(dato_1);
Serial.println(dato_2);
Serial.println(dato_3);
Serial.println(dato_4);
// LCD
lcd.clear();
lcd.setCursor(0,0);
lcd.print(dato_1);
lcd.setCursor(8,0);
lcd.print(dato_2);
lcd.setCursor(0,1);
lcd.print(dato_3);
lcd.setCursor(8,1);
lcd.print(dato_4);
}
delay(50);
}
|
_________________
3.- Enviar dos números mediante el bloque : EnviarNúmero2Bytes.
p40_movil_a_arduino_Texto_Byte_Deslizador.aia
_________________
- Diseño.
- Intervalo del Reloj = 700
_________________
- Bloques.
_________________
- Arduino.
tres_valores_v3.ino |
/* Juan Antonio Villalpando
juana1991@yahoo.com
Envío de tres valores
mediante App Inventor 2
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
int color = -1;
int valor = -1;
String dato_1;
String dato_2;
String dato_3;
void setup()
{
lcd.begin(16,2);// Columnas y filas de LCD
Serial.begin(9600);
}
void loop() {
if(Serial.available())
{
unsigned int color = Serial.read();
unsigned int valor = Serial.read();
if(color == 1) {dato_1 = valor;}
if(color == 2) {dato_2 = valor;}
if(color == 3) {dato_3 = valor;}
// LCD
lcd.clear();
lcd.setCursor(0,0);
lcd.print(dato_1);
lcd.setCursor(8,0);
lcd.print(dato_2);
lcd.setCursor(0,1);
lcd.print(dato_3);
}
delay(50);
}
|
__________________________________
|