iOS : Ejercicio 13. Acelerómetro y CMMotionManager

Blog >Lista ejercicios >  Ejercicio 13


Hola developers, continuamos nuestro tutorial de ejercicios básicos con este post :




Ejercicio 13. Usando el acelerómetro con CMMotionManager

Antes de nada, vamos a comentar un poco lo que es el acelerómetro :

El acelerómetro es la medida de aceleración de los 3 ejes (x, y, z) del dispositivo. 



El acelerómetro es un sensor que mide la aceleración. Cuando el dispositivo está quieto recibe una aceleración que se mide en gravedad : (1g = 9´8 N). 

Gracias al acelerómetro sabemos si el dispositivo está hacia arriba, boca abajo, su inclinación, etc... El sensor sólo mide los movimientos, no mide la distancia con el suelo. Si el dispositivo está en reposo recibirá 1g en el eje Z, si está en caida libre recibirá 0g.


Podemos usar el acelerómetro de 2 maneras, la primera mediante un delegado que se encargará de ejecutar algún método en función el cambio de los valores de dicho acelerómetro. La segunda en el intervalo de actualización que está en segundos. Se suelen tomar valores pequeños : (1/100) segundos.

En este ejercicio, vamos a usar la segunda, es decir usar el framework Core Motion, que permite a las aplicaciones recibir datos que los sensores de movimiento recogen constantemente. Vamos a usar CMMotionManager para interactuar con el framework.

Se crea una UNICA instancia de la clase para trabajar con sensores.


CMMotionManager *motionManager =[[CMMotionManager alloc] init];


Bueno, vamos al lio, abrimos proyecto en XCode de la forma habitual :




Vamos a darle al proyecto,vamos a la pestaña Build Phases, en el apartado Link Binary With Libraries y en el + importamos Core Motion, a continuación en el storyboard ponemos 6 labels o con 3 nos vale, abrimos la vista "Asistant Editor" y colocamos las conexiones pertinentes a las labels. En esta imagen esta ya todo hecho, a la izquierda si os fijais en la carpeta frameworks aparece.




#import 
#import 

@interface ViewController : UIViewController{
    __weak IBOutlet UILabel *valorX;
    __weak IBOutlet UILabel *valorY;
    __weak IBOutlet UILabel *valorZ;
}
@end


Como veis el .h tiene poco, las 3 conexiones y el import de la libreria Core Motion, mientras que en el .m ya hacemos más operaciones, como verificar que el software necesario del teléfono está disponible, o el intervalo de refrescar los datos.

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
 //Instancia a objeto
    CMMotionManager *motionManager = [[CMMotionManager alloc] init];
    //ASIGNAMOS EL INTERVALO DE ACTUALIZACION
    motionManager.gyroUpdateInterval = 1.0 / 30.0;
    //PREGUNTAMOS SI EL DISPOSITIVO TIENE EL SOFTWARE NECESARIO
    if (motionManager.gyroAvailable) {
        //En el interior del manejador indicaremos las opciones a realizar cuando el giroscopio este activo
        [motionManager startGyroUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMGyroData *gyroData, NSError *error) {
            //almacenamos variables del acelerómetro
   double gyroX = gyroData.rotationRate.x;
            double gyroY = gyroData.rotationRate.y;
            double gyroZ = gyroData.rotationRate.z;

            valorX.text = [NSString stringWithFormat:@"%f", gyroX];
            valorY.text = [NSString stringWithFormat:@"%f", gyroY];
            valorZ.text = [NSString stringWithFormat:@"%f", gyroZ];
        }];
        [motionManager stopGyroUpdates];
    }
}
@end


Y ya está, esta es la base para comenzar a usar el acelerómetro, sólo funciona con dispositivos reales.

Ya que el emulador carece del software necesario. No digo más ya que el código está comentado. Salu2!!!!!




Compartir Compartir Compartir Compartir




Thebestandroide Indice Thebestandroide Ejercicio anterior Thebestandroide Siguiente ejercicio

0 comentarios:

Publicar un comentario