Pregunta

Me parece que no puede encontrar ninguna documentación en línea sobre esto, y lo que estoy buscando en Google me está dando una gran cantidad de información contradictoria ...

¿Fue útil?

Solución

iphonedevsdk.com :

  

Los acelerómetros utilizados en la primera   y iPhones de segunda generación (y I   asume también el iPod touch) operar   en dos modos: +/- 2 g, y +/- 8 g.   (En realidad, como se observó, que   aceleraciones informe un tanto fuera   el rango nominal. La precisión no es   spec'ed fuera de ese rango, aunque.)

     

Apple ellos opera en el +/- 2 g   modo. Hay una compensación: La corriente   resolución es nominalmente 0,018 g,   de acuerdo con la hoja de datos (aunque mi   usos del iPhone de primera generación   0,018168604, de acuerdo con una versión modificada de AccelerometerGraph). En el   +/- 8 modo g, la resolución sería cuatro veces más cruda.

     

Asumo Apple decidió que el más fino   resolución sería más útil que   el rango más amplio. (Prefiero ver más fino   resolución de 0.018 g. Así que ninguno de   nosotros es totalmente satisfecho.)

     

No se puede cambiar el modo con cualquier   característica publicada de los APIs. Ya que   están pasando aceleración como una   doble, que podrían permitir teóricamente   un cambio en el modo, y simplemente mira   el modo cuando reescalado el valor A / D,   antes de informar de aceleración. (Los   lugar obvio para establecer el modo sería   en la convocatoria que establece la   solicitud para recibir acelerómetro   información.) Sin embargo, para retroceder   compatibilidad, el sistema operativo tendría que   establecer el modo de acelerómetro a +/- 2 g   al inicio de la aplicación.   Y ninguno de los procesos en segundo plano   podría ser permitido para establecer el   modo de acelerómetro.

Otros consejos

Las pantallas de aplicaciones aGauge estos datos en bruto procedentes del acelerómetro al mover el dispositivo. También puede ayudar a encontrar el umbral "flip" para su dispositivo.

He creado el siguiente aplicación para tratar de poner a prueba los rangos ...

UIAccelerometer *objAccelerometer;
UILabel *lblxmin, *lblxmax, *lblymin, *lblymax, *lblzmin, *lblzmax;
UILabel *lblxnow, *lblynow, *lblznow;

float xmin = 0.0, xmax = 0.0, ymin = 0.0, ymax = 0.0, zmin = 0.0, zmax = 0.0, xnow = 0.0, ynow = 0.0, znow = 0.0;

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {   
    //NSLog (@"%f, %f, %f", acceleration.x, acceleration.y, acceleration.z);
    xnow = acceleration.x;
    ynow = acceleration.y;
    znow = acceleration.z;
    if (xnow < xmin) { xmin = xnow; }
    if (ynow < ymin) { ymin = ynow; }
    if (znow < zmin) { zmin = znow; }

    if (xnow > xmax) { xmax = xnow; }
    if (ynow > ymax) { ymax = ynow; }
    if (znow > zmax) { zmax = znow; }

    lblxmin.text = [NSString stringWithFormat:@"%f", xmin];
    lblymin.text = [NSString stringWithFormat:@"%f", ymin];
    lblzmin.text = [NSString stringWithFormat:@"%f", zmin];

    lblxmax.text = [NSString stringWithFormat:@"%f", xmax];
    lblymax.text = [NSString stringWithFormat:@"%f", ymax];
    lblzmax.text = [NSString stringWithFormat:@"%f", zmax];

    lblxnow.text = [NSString stringWithFormat:@"%f", xnow];
    lblynow.text = [NSString stringWithFormat:@"%f", ynow];
    lblznow.text = [NSString stringWithFormat:@"%f", znow];

}

-(void) invokeAccelerometer {   
    objAccelerometer = [UIAccelerometer sharedAccelerometer];
    objAccelerometer.delegate = self;
    objAccelerometer.updateInterval = (1.0 / 10.0);
}

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    lblxmin = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 100, 40)];
    lblxnow = [[UILabel alloc] initWithFrame:CGRectMake(100, 10, 100, 40)];
    lblxmax = [[UILabel alloc] initWithFrame:CGRectMake(200, 10, 100, 40)];

    lblymin = [[UILabel alloc] initWithFrame:CGRectMake(10, 60, 100, 40)];
    lblynow = [[UILabel alloc] initWithFrame:CGRectMake(100, 60, 100, 40)];
    lblymax = [[UILabel alloc] initWithFrame:CGRectMake(200, 60, 100, 40)];

    lblzmin = [[UILabel alloc] initWithFrame:CGRectMake(10, 110, 100, 40)];
    lblznow = [[UILabel alloc] initWithFrame:CGRectMake(100, 110, 100, 40)];
    lblzmax = [[UILabel alloc] initWithFrame:CGRectMake(200, 110, 100, 40)];

    [self.view addSubview:lblxmin];
    [self.view addSubview:lblxnow];
    [self.view addSubview:lblxmax];

    [self.view addSubview:lblymin];
    [self.view addSubview:lblynow];
    [self.view addSubview:lblymax];

    [self.view addSubview:lblzmin];
    [self.view addSubview:lblznow];
    [self.view addSubview:lblzmax];

    [self invokeAccelerometer];

    [super viewDidLoad];
}

El problema es que cuando puedo girar mi iPod a lo largo de los ejes horizontal / vertical y luego darle la vuelta, me valores como:

xmin -1.271802

xmax 1.180959

ymín -1.344477

ymáx 1.108285

zmín -2.30713

zmáx 2.325581

Si tomo el iPod y agitar el heck fuera de él, lo entiendo ...

x -2,325581-2,307413

y -2,325581-2,307413

z -2,307413-2,325581

Alguna idea de lo que está midiendo?

El mejor que he llegado con es:

eje vertical

x = -1 si inclinada hacia la izquierda (<|)

x = 1 si se encuentra inclinado todo el camino a la derecha (|>)

  • donde

y ~ -1 si la pantalla está hacia arriba, perpendicular al piso ( "pie")

y ~ 1 si espaldas a usted (y al revés)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top