jueves, 10 de mayo de 2012

Aplicación Android con brújula integrada


Además de mejorar el algoritmo de detección de contenedores con nuestra nueva brújula I2C, hemos incorporado en la aplicación Android la monitorización de la posición del robot respecto al Polo Norte magnético en tiempo real.

Como resultado de ello, en la página de “sensores” de nuestra interfaz gráfica aparece ahora la imagen de una brújula, cuya aguja irá rotando en función de las lecturas obtenidas del sensor brújula.

Para poder llevar a cabo esta monitorización, hemos tenido que introducir algunos cambios en la clase principal del software de nuestro robot:
  • Main.java: el nuevo array de datos que manda el robot de manera continua por el stream de salida Bluetooth está formado por 7 bytes: distancia, color de la pelota, color del contenedor, pelotas que le quedan, batería y 2 bytes con la medida de la brújula.


Para que estos cambios también se vean reflejados en la propia aplicación Android, hemos realizado algunas modificaciones más en las siguientes clases del software de la aplicación:
  • Robot.java: Su método run() lee los 7 bytes que le llegan por su stream de entrada y los almacena en las variables “distance”, “ballColor”, “containerColor”, “balls”, “battery”, “reg2” y“reg3”. Llama a distintos métodos de la actividad principal (pasando estas variables como parámetro) para que se muestre al usuario la información en la pantalla del dispositivo Android.
  • NXJAndroidActivity.java: En la actividad principal de la aplicación, trabajamos con algunas variables nuevas:
    • ImageView img: imagen de una brújula
    • Float rotCompass: ángulo de la rotación que había sufrido la imagen al representar la última medida de la brújula.
      Además, hemos añadido el método
      public void setCompassValue (byte reg2, byte reg3). Éste se encarga de unir los 2 bytes que llegan por el stream de entrada con la medida de la brújula y obtener el float “newRot”, que contiene la lectura de la brújula en grados sexagesimales. Hacemos que la aguja de la brújula rote desde su posición inicial (definida por un ángulo “rotCompass”) hasta la nueva posición tras la medida (hasta un ángulo “rotCompass+newRot”).
Con esta implementación, ya tenemos completa la monitorización de los sensores de nuestro robot en tiempo real.

No hay comentarios:

Publicar un comentario