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
___________________________
9A.- Bluetooth, Arduino y App Inventor. App Inventor envía información al Arduino. Básico.
- App Inventor mediante Botones, CasillaDeVerificación y Deslizador, envía información a Arduino para que actúe con LED y con pantalla LCD.
_______________________________________________
1.- El App Inventor envía información al Arduino mediante Botones. LED.
p9A1_bluetooth_botones.aia
_______________________________________________
- Diseño.
_______________________________________________
- Bloques.
_______________________________________________
- Comentarios.
- Se puede realizar la conexión de dos formas, mediante el SelectorDeLista elijiendo el Bluetooth correspondiente, o si se conoce la Mac del Bluetooth, directamente mediante el Botón6.
_______________________________________________
- Arduino.
___________________________
- Conexión Arduino.
___________________________
- Código Arduino.
- IMPORTANTE: Para cargar el programa en el Arduino, debe estar desconectado el módulo Bluetooth.
|
char caracter;
int Pin12 = 12;
int Pin13 = 13;
void setup() {
Serial.begin(9600);
pinMode(Pin12, OUTPUT);
pinMode(Pin13, OUTPUT);
}
void loop() {
if(Serial.available()) {
caracter = Serial.read();
if(caracter == '1')
{
digitalWrite(Pin12, HIGH);
}
if(caracter == '2')
{
digitalWrite(Pin12, LOW);
}
if(caracter == '3')
{
digitalWrite(Pin13, HIGH);
}
if(caracter == '4')
{
digitalWrite(Pin13, LOW);
}
} // =>Fin del available
} // =>Fin del loop
|
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
2.- El App Inventor envía información al Arduino mediante Botones. LED. Pantalla LCD.
- La aplicación para App Inventor es la misma que la del ejemplo anterior:
p9A1_bluetooth_botones.aia
- En este ejemplo además de encender/apagar los LED, se muestra en la pantalla LCD el caracter enviado.
- Con pantalla LCD.
http://kio4.com/arduino/31pantallaLCD.htm
- Carga la aplicación Código para ver direcciones I2C de la página anterior, para ver la dirección de tu pantalla LCD (podrá ser la 0x27 o la 0x3F)
- Necesita la librería LiquidCrystal_I2C.zip
- También necesita la librería Wire.zip
- Descomprime esos archivos y lo guardas en la carpeta libraries donde tengas instalado el Arduino, por ejemplo:
C:\Archivos de programas(86)\Arduino\libraries
___________________________
- Conexión Arduino.
___________________________
- Código Arduino.
- IMPORTANTE: Para cargar el programa en el Arduino, debe estar desconectado el módulo Bluetooth.
|
// Juan Antonio Villalpando
// juana1991@yahoo.com
// kio4.com
#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 caracter;
int Pin12 = 12;
int Pin13 = 13;
void setup() {
lcd.begin(16,2);// Columnas y filas de LCD
Serial.begin(9600);
pinMode(Pin12, OUTPUT);
pinMode(Pin13, OUTPUT);
}
void loop() {
if(Serial.available()) {
caracter = Serial.read();
if(caracter == '1')
{
digitalWrite(Pin12, HIGH);
}
if(caracter == '2')
{
digitalWrite(Pin12, LOW);
}
if(caracter == '3')
{
digitalWrite(Pin13, HIGH);
}
if(caracter == '4')
{
digitalWrite(Pin13, LOW);
}
lcd.clear(); // Borra pantalla
lcd.setCursor(0,0); // Inicio del cursor
lcd.print("Caracter = ");
lcd.setCursor(0,1); // Siguiente renglón.
lcd.print(caracter);
delay(100);
} // =>Fin del available
} // =>Fin del loop
|
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
3.- El App Inventor envía información al Arduino mediante CasillaDeVerificación. LED. Pantalla LCD.
p9A2_bluetooth_casilla.aia
- La conexión y el código Arduino es similar al de la pantalla LCD. La única diferencia es que en el de la pantalla LCD teníamos dos LED y en este código disponemos de 3 LED, simplemente conecta otro LED en el Pin11 y modifica el código de Arduino.
int Pin11 = 11;
...
pinMode(Pin11, OUTPUT);
...
Añadir if HIGH y LOW para el Pin11
_______________________________________________
- Diseño.
_______________________________________________
- Bloques.
- La conexión se realiza directamente conociendo la Mac del Bluetooth, en este caso 11:22:33:44:55:66
_________________________________________
- Con Relé.
- En vez de poner LED, puedes poner relés, con ellos podrás controlar mayores tensiones.
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
4.- Enviar texto.
- Escribimos un Texto en la CajaDeTexto y lo enviamos por Bluetooth, aparecerá en la pantalla LCD.
- Observa que siempre se envía el Texto y un asterisco que indica fin de mensaje.
- La aplicación es la misma que vimos al principio de esta página:
p9A1_bluetooth_botones.aia
- La conexión es la misma que hemos visto anteriormente:
- Solo cambia el código del Arduino:
___________________________
- Código Arduino.
|
// Juan Antonio Villalpando
// juana1991@yahoo.com
// kio4.com
#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 caracter;
String palabra;
int Pin12 = 12;
int Pin13 = 13;
void setup() {
lcd.begin(16,2);// Columnas y filas de LCD
Serial.begin(9600);
pinMode(Pin12, OUTPUT);
pinMode(Pin13, OUTPUT);
}
void loop() {
if(Serial.available()) {
caracter = Serial.read();
palabra = palabra + caracter;
/*
if(caracter == '1'){digitalWrite(Pin12, HIGH);}
if(caracter == '2'){digitalWrite(Pin12, LOW);}
if(caracter == '3'){digitalWrite(Pin13, HIGH);}
if(caracter == '4'){digitalWrite(Pin13, LOW);}
*/
if(caracter == '*') {
// Serial.println(palabra);
palabra = palabra.substring(0, palabra.length() - 1); // Quita último caracter *
lcd.clear(); // Borra pantalla
lcd.setCursor(0,0); // Inicio del cursor
lcd.print("Palabra = ");
lcd.setCursor(0,1); // Siguiente renglón.
lcd.print(palabra);
// LED13
if (palabra == "on12"){digitalWrite(Pin12, HIGH);}
if (palabra == "off12"){digitalWrite(Pin12, LOW);}
if (palabra == "on13"){digitalWrite(Pin13, HIGH);}
if (palabra == "off13"){digitalWrite(Pin13, LOW);}
palabra = "";
}
delay(100);
} // =>Fin del available
} // =>Fin del loop
|
___________________________
- Comentarios.
- Observa cómo he puesto los códigos del if(caracter == ....), observa también cómo los he anulados.
/*
if(caracter == '1'){digitalWrite(Pin12, HIGH);}
if(caracter == '2'){digitalWrite(Pin12, LOW);}
if(caracter == '3'){digitalWrite(Pin13, HIGH);}
if(caracter == '4'){digitalWrite(Pin13, LOW);}
*/
- El código del Arduino está recibiendo caracteres y a la vez lo va acumulando en palabra, cuando recibe el asterisco "*", indica que ha finalizado la palabra enviada.
- Por ejemplo: off12*
- Le quita el asterisco y queda off12
- La muestra en la LCD.
- Según esa palabra, enciende o apaga el LED correspondiente.
- Si quieres que además funcionen directamente con los número 1, 2, 3 y 4, desmarca esas líneas y en el código de App Inventor le pones un asterisco al final de cada número 1* , 2*, 3* y 4*
___________________________
___________________________
___________________________
___________________________
- Sin asterisco.
p9A0i_bluetooth_texto_2.aia
- Utilzando en el código de Arduino palabra.indexOf, no es necesario poner el asterisco.
- palabra.indexOf nos informará si la cadena enviada contiene "on12", "off12", "on13", "off13".
_______________________________________________
- Bloques.
_______________________________________________
- Código Arduino.
|
// Juan A. Villalpando
// http://kio4.com/appinventor/9A0_Resumen_Bluetooth.htm
#define Pin12 12
#define Pin13 13
char caracter;
String palabra;
void setup() {
Serial.begin(9600);
pinMode(Pin12, OUTPUT);
pinMode(Pin13, OUTPUT);
}
void loop() {
if(Serial.available()) {
caracter = Serial.read();
palabra = palabra + caracter;
Serial.println(palabra);
if (palabra.indexOf("on12")>= 0){digitalWrite(Pin12, HIGH); palabra = "";}
if (palabra.indexOf("off12")>= 0){digitalWrite(Pin12, LOW); palabra = "";}
if (palabra.indexOf("on13")>= 0){digitalWrite(Pin13, HIGH); palabra = "";}
if (palabra.indexOf("off13")>= 0){digitalWrite(Pin13, LOW); palabra = "";}
delay(100);
}
}
|
___________________________
__________________________________
|