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
___________________________
9L.- Enviar letra a letra. Sensor de orientación. Pantalla LCD.
- Desde Android envíamos los grados del azimut del Sensor de Orientación mediante BT a Arduino para que la muestre en la pantalla LCD.
- Arduino recibirá los grados y los mostrará en la pantalla LCD.
- NOTA: me voy a basar en el tutorial anterior, por lo cual los códigos serán una modificación del tutorial anterior: 9K.- Letra a letra.
- Para estudiar la pantalla LCD consulta mi tutorial en... Pantalla LCD.
____________________________
- Forma de conectarlo.
Módulo Bluetooh |
Arduino |
VCC |
5 V |
GND |
GND |
TXD |
Al terminal 10 del Arduino |
RXD |
Al terminal 11 del Arduino |
- En mi caso he conectado el LED al terminal 6.
_______________________
- Código del Arduino.
- NOTA: este es el mismo código de Arduino que hemos visto en el tutorial anterior. En este caso no es necesario la parte de encendido y apagado del LED6.
enviar_numero_orientacion.ino |
// Juan Antonio Villalpando
// juana1991@yahoo.com
// kio4.com
#include <SoftwareSerial.h>
#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 LED = 6;
SoftwareSerial I2CBT(10,11);
// El TX del módulo BT va al pin 10 del Arduino
// El RX del módulo BT va al pin 11 del Arduino
void setup() {
Serial.begin(9600);
I2CBT.begin(9600);
lcd.begin(16,2); // Columnas y filas de LCD
pinMode(LED, OUTPUT);
}
void loop() {
byte guardados[10];
int caracteres;
char letra;
String palabra;
int k = 0;
while(1){
if ((caracteres=(I2CBT.available()))>0){
letra = char(I2CBT.read());
/////////////////////////////
// Si tiene w, comienza nuevo texto.
if (letra == 'w'){
k = -2;
lcd.clear(); // Borra pantalla
}
////////////////////////////
k = k+1;
guardados[k]=letra;
// Serial.print(letra);
}
guardados[k+1]=0; // Fin de caracteres.
palabra = (char*)guardados;
lcd.setCursor(0,0); // Inicio del cursor
lcd.print(palabra);
//////////////////////////////////
if (palabra == "enciende"){
digitalWrite(LED, HIGH);
}
if (palabra == "apaga"){
digitalWrite(LED, LOW);
}
////////////////////////////////
}
} |
- Si llega un texto comenzando por w, significa que es un texto nuevo. Borra pantalla. Inicia contador k.
- El k=-2 para anular la w de comienzo de texto y para que el texto comience en la posición 0,0 de la pantalla.
- Las letras que van llegando se van guardando en la variable "guardados".
- Para indicar que la variable "guardados" ha terminado, se le pone un 0.
- Si descomentas la línea del // Serial.print(letra); y abres el SerialMonitor de Arduino verás los caracteres.
___________________________________________________________
9L.- Enviar azimut del Sensor de Orientación, número a número por BT y mostrarlo en LCD.
p9L_letra_letra_Orientacion.aia
- Desde Android envíamos el valor numérico de la posición en grados que marca el Sensor de Orientación.
- Aparecerá en la pantalla LCD.
_________________
- Diseño.
- El Diseño es una modificación del Tutorial anterior.
- En las Propiedades del Reloj1 ponemos un Intervalo de 500 y desmarcamos TemporizadorHabilitado.
- Añadimos un Reloj2 con un Intervalo de 1000.
- Añadimos un SensorDeOrientación.
_________________
- Bloques.
- Previamente guardo los números en una lista intermedia, pero se podría haber realizado sin esta lista.
- Hago que todo texto comience por w, de esta manera puedo controlar el inicio de un nuevo azimut.
- Se va escribiendo en la Etiqueta1 y enviando por Bluetooth número a número.
- En el tutorial anterior el código del CampoDeTexto estaba en el Botón1, es este caso se realiza el código cuando cambia la orientación.
- He puesto un Reloj2, para que cada segundo se envíe un dato.
_________________
- Comentarios.
- Transmite y muestra el número entero redondeado.
_________________
- Propuesta.
- Cambia el código del Arduino para que si el acimut está entre 40 y 90, se encienda el LED6.
enviar_numero_orientacion_2.ino |
// Juan Antonio Villalpando
// juana1991@yahoo.com
// kio4.com
#include <SoftwareSerial.h>
#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 LED = 6;
SoftwareSerial I2CBT(10,11);
// El TX del módulo BT va al pin 10 del Arduino
// El RX del módulo BT va al pin 11 del Arduino
int acimut;
void setup() {
Serial.begin(9600);
I2CBT.begin(9600);
lcd.begin(16,2); // Columnas y filas de LCD
pinMode(LED, OUTPUT);
}
void loop() {
byte guardados[10];
int caracteres;
char letra;
String palabra;
int k = 0;
while(1){
if ((caracteres=(I2CBT.available()))>0){
letra = char(I2CBT.read());
/////////////////////////////
// Si tiene w, comienza nuevo texto.
if (letra == 'w'){
k = -2;
lcd.clear(); // Borra pantalla
}
////////////////////////////
k = k+1;
guardados[k]=letra;
// Serial.print(letra);
}
guardados[k+1]=0; // Fin de caracteres.
palabra = (char*)guardados;
lcd.setCursor(0,0); // Inicio del cursor
lcd.print(palabra);
acimut = palabra.toInt();
// Serial.print(acimut);
if (acimut > 40 && acimut < 90 ){
digitalWrite(LED, HIGH);
} else {
digitalWrite(LED, LOW);
}
}
} |
------------------------------------------------------------------------------------
- Para que solo envíe información cuando cambie el número de la orientación, de esta forma parpadeará menos.
p9L_letra_letra_Orientacion_v2.aia
__________________________________
|