Question

Je ne peux pas sembler trouver une documentation en ligne à ce sujet, et ce que je suis googler me donne beaucoup d'informations contradictoires ...

Était-ce utile?

La solution

De iphonedevsdk.com :

  

Les accéléromètres utilisés dans la première   et un second iPhones génération (I et   Supposons également l'iPod touch) fonctionnent   selon deux modes: +/- 2 g, et +/- 8 g.   (En fait, comme vous avez observé, ils   accélérations rapport un peu en retrait   la plage nominale. La précision est pas   doté de caractéristiques techniques en dehors de cette plage, si.)

     

Apple les exploite dans le +/- 2 g   mode. Il y a un compromis entre: Le courant   résolution est nominalement 0,018 g,   selon la fiche technique (bien que mon   première génération utilise iPhone   0,018168604, selon une version modifiée de AccelerometerGraph). dans le   +/- en mode 8 g, la résolution serait quatre fois plus grossière.

     

Je suppose que Apple a décidé que le plus fin   la résolution serait plus utile que   la gamme plus large. (Je préfère voir plus fin   résolution de 0,018 g. Donc, ni de   nous est pleinement satisfait.)

     

Vous ne pouvez pas changer le mode avec tout   fonction publié des API. Puisque   ils passent l'accélération en tant que   double, ils pourraient théoriquement permettre   un changement de mode, et regardez simplement   le mode à remettre à l'échelle la valeur A / D,   avant l'accélération des rapports. (Le   endroit évident pour définir le mode serait   dans l'appel qui met en place la   application à recevoir l'accéléromètre   informations). Cependant, pour l'arrière   la compatibilité, le système d'exploitation devrait   régler le mode d'accéléromètre à +/- 2 g   au début de l'application.   Et aucun des processus d'arrière-plan   pourrait être autorisé à régler la   mode accéléromètre.

Autres conseils

Les applications aGauge affiche ces données brutes provenant de l'accéléromètre que vous vous déplacez l'appareil. Il peut également vous aider à trouver le seuil « flip » pour votre appareil.

J'ai créé l'application suivante pour essayer de tester les plages ...

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];
}

Le problème est, quand je tourne mon iPod le long des axes horizontal / vertical, puis retournez-, je reçois des valeurs telles que:

xmin -1,271802

Xmax 1.180959

ymin -1,344477

ymax 1.108285

zmin -2,30713

zmax 2.325581

Si je prends l'iPod et secouer le diable hors de lui, je reçois ...

x -2,325581 à 2,307413

y -2,325581 à 2,307413

z -2,307413 à 2,325581

Toutes les idées ce qu'il mesure?

Le meilleur que je suis venu avec est:

axe vertical

x = -1 si incliné vers la gauche (<|)

x = 1, si incliné tout le chemin vers la droite (|>)

y ~ -1 si l'écran est face à vous, perpendiculaire au sol ( "debout")

y ~ 1 si éloigné de vous (et à l'envers)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top