Académique Documents
Professionnel Documents
Culture Documents
Para incluir elementos en App Inventor solo tendremos que buscar el que queremos
incluir en la aplicación y arrastrarlo en la pantalla Visor, pero hay ciertos elementos que
nos facilitarán crear una interfaz mejor, como los elementos Disposición.
Disposición
Los elementos de Disposición, o Layout en inglés, permiten modificar la forma en que
se colocan los elementos. Existen varios tipos:
• Tabular: Ordena los elementos en forma de tabla.
Aplicación
En esta entrada vamos a hacer una aplicación que utilizará el reloj del dispositivo para
ejecutar la vibración, demostrando así como la aplicación responde a eventos.
Diseño de la UI
Dentro del contenedor horizontal que hemos incluido en el paso anterior, incluimos dos
botones, que se encargarán de iniciar y parar la ejecución del programa. Modificamos
su nombre y texto por Iniciar y Parar y cambiamos su Ancho para que se ajusten al
contenedor:
Programación
Ahora, cada vez que se pulse sobre el botón Iniciar, se modificará el valor de la
frecuencia con la que se activará el temporizador.
Modificamos la comparación para que sea mayor que y incluimos en los miembros de
la comparación, de izquierda a derecha, tomar YPrevio y tomar YActual:
Esta orden se ejecuta si nos desplazamos dentro del lienzo sobre el eje Y y hacia
arriba, por lo que aumentaremos la variable. Podríamos asignar a la variable un valor
en función de la posición que se haya tocado, pero para hacer la ejecución más estable
e intuitiva, se aumentará el valor de la variable en una cantidad fija. En este caso,
aumentaremos en 100 unidades el valor de la variable intervalo:
Duplicación bloque
Podemos reutilizar todo el bloque menos la operación de suma, que tenemos que
cambiar por una resta:
Para modificar el tiempo que vibrará cada vez que se active el temporizador,
utilizaremos el movimiento sobre el eje X del lienzo. Los bloques de programación son
Puedes programar también la aplicación para que sea necesario desplazarse una cierta
distancia sobre el lienzo para que se modifique la variable.
Creando la interfaz
Para crear la interfaz utilizaremos “layaouts” para organizar los elementos, botones
para controlar el movimiento y un “canvas” que contendrá la pelota que vamos a mover.
Para terminar con el “canvas”, arrastramos el elemento Ball (pelota) dentro de éste. En
sus propiedades, modificamos el color a verde, cambiamos el radio a 20 y modificamos
su posición para que sea X = 0 e Y = 0.
Además, modificamos el texto en el botón para que muestre el carácter “^”, cambiamos
la propiedad shape (forma), a rounded (redondeado) y renombramos el botón como up.
Para poner los tres botones centrales utilizaremos una disposición horizontal, a la que
modificamos su ancho para que sea fill parent, es decir, se ajuste al contenedor, en el
que incluiremos los siguientes elementos: 3 botones y 2 disposiciones horizontales
(puede usarse cualquiera de ellas) que tendrán un tamaño de 10 pixels de ancho y alto.
En el caso de los botones, modificamos su tamaño para que se ajusten al contenedor,
así cambiarán su ancho ajustándose a la pantalla. De izquierda a derecha,
cambiaremos su texto y nombre para que sean:
• < left
• o reset
• > right
También cambiamos la propiedad shape para que sea rounded.
Código Arduino
En este caso vamos a utilizar el código correspondiente que permita recibir una cadena
de caracteres del tipo =avanzar+, por lo que programaremos la aplicación de App
Inventor para que envíe las ordenes de esta manera, pudiendo así reutilizar el código.
Se han programado diferentes modos de funcionamiento que incluyen órdenes de
movimiento (avanzar, retroceder, izquierda, derecha, parar y 180º), modos de
funcionamiento automáticos (obstaculos, siguelineas y sigueluz).
App Inventor
Para comenzar, creamos un nuevo proyecto, que en nuestro caso se
llama PrintBot_Botones.
Dentro del layaout vertical, incluimos tres botones y cambiamos su nombre y texto
a Line Follower, Avoid obstacles y Light Follower, respectivamente. Modificamos también
el tamaño de los botones a fill parent. Podemos cambiar el tamaño del layaout que
contiene los botones a fill parent o darle un tamaño fijo. En este caso, utilizamos la
ultima opción y daremos un ancho al layaout de 150 píxeles.
Para representar visualmente los datos del acelerómetro, utilizaremos tres etiquetas
que colocaremos dentro de un layaout vertical. Cambiaremos su nombre, comenzando
por arriba, a Acel_X, Acel_Y y Acel_Z.
El texto de los botones se va a modificar directamente desde la programación de la
aplicación. Para finalizar, incluimos los
elementos AccelerometerSensor y OrientationSensor
Utilizaremos los bloques, por ejemplo, set Acel_X.Text to y a éste se unirá el bloque join,
donde concatenaremos, en este caso “X =” y el valor de la aceleración X que
obtendremos mediante get xAccel.
Se duplicará el conjunto de los bloques para que Acel_Y y Acel_Z la aceleración en el eje
Y y en el eje Z.
Conexiones eléctricas
Para esta entrada solo se utilizarán los servos de rotación continua, aunque si tienes tu
PrintBot montado al completo puedes utilizarlo igualmente. En nuestro caso,
utilizaremos el pin 9 para conectar el servo izquierdo y el pin 8 para el derecho.
Programación Arduino
El código Arduino de esta entrada es una modificación del enlazado y lee a través del
Bluetooth las palabras que se envían desde App Inventor al terminal.
Para saber qué palabra se ha leído se utiliza la función readFromAndroid y para realizar
la acción en función de la palabra se utiliza la función writeData. Si se modifica el
programa de App Inventor es esta función la que hay que cambiar para adecuarlo a los
cambios.
A continuación, incluimos un canvas con sus propiedades ancho y alto en fill parent.
Utilizaremos el canvas para detectar los gestos
Debajo del canvas, arrastramos un layout horizontal que contendrá un botón para hacer
que el PrintBot gire 180º y un layout vertical en el que incluiremos dos etiquetas, que
mostrarán el ángulo hacia el que se realiza el gesto y la dirección correspondiente al
gesto detectado. Modificaremos el tamaño de todos los elementos a fill parent para que
ocupen el mismo espacio en pantalla.
Programación
Para detectar los gestos, utilizaremos un canvas, el bloque Flung que detecta gestos y
su propiedad heading que indica el ángulo hacia el que se realiza el gesto.
A continuación, programamos el botón turn180 para que envíe la palabra 180 cuando
sea pulsado.
Para hacer que el PrintBot se pare, utilizaremos el bloque Touched del canvas, que se
activa cuando pulsamos en cualquier punto de éste. Cuando se pulse, enviaremos por
Bluetooth STOP y cambiaremos el texto de la etiqueta orientation a STOP.
Para terminar la programación tenemos que detectar los gestos que se realizan en la
pantalla del terminal. Para detectar gestos se utiliza el bloque Flung del canvas y, la
variable heading, que nos da la dirección en grados a la que se realiza el gesto. Para
determinar la dirección a la que se realiza el gesto, dividiremos la superficie en sectores
como en la imagen siguiente, y utilizando condicionales if asignando a cada intervalo
una dirección.
En primer lugar, se comprueba mediante un if que el valor leído en heading esté entre
45 y 135 grados. Si es correcto, se envía a través del Bluetooth la palabra UP y se
cambia el texto de la etiqueta orientation a UP.
Para el gesto hacia abajo comprobamos si heading está entre -45 y -135 grados y para
el gesto hacia la derecha entre -45 y 45 grados. Si se cumple la condición enviamos y
cambiamos el texto de heading por DOWN y RIGHT respectivamente.
En el caso del gesto hacia la izquierda, no funciona utilizando el bloque and dentro de
la comparación del if. Para que funcione correctamente utilizamos el bloque or,
comprobando si es mayor de 135 o menor de -135 grados. Si se cumple la condición,
se envía y se cambia el texto de heading por LEFT.
La programación del conjunto con la detección de todos los gestos se puede ver en la
siguiente imagen: