Frage

Ich kann keine Dokumentation online über diese scheinen zu finden, und was ich googeln ist mir eine Menge widersprüchliche Informationen geben ...

War es hilfreich?

Lösung

iphonedevsdk.com :

  

Das Beschleunigungsmesser in dem ersten verwendet   und zweite Generation iPhones (und I   nehmen auch der iPod touch) betreibt   in zwei Modi: +/- 2 g und +/- 8 g.   (Tatsächlich, wie man beobachtet, sie   Bericht Beschleunigungen etwas außerhalb   der Nennbereich. Die Genauigkeit ist nicht   obwohl außerhalb dieses Bereichs spec'ed.)

     

Apple-arbeitet sie in der +/- 2 g   Modus. Es ist ein Kompromiss: Die aktuelle   Auflösung von nominell 0,018 g,   nach dem Datenblatt (obwohl meine   erste Generation iPhone Anwendungen   0,018168604, nach einer modifizierten Version von AccelerometerGraph). In dem   +/- 8 g Modus würde die Auflösung viermal gröber sein.

     

Ich gehe davon aus, dass Apple-feineren entschieden   Auflösung wäre nützlicher als   der breitere Bereich. (Ich würde eher feinere sehen   Auflösung als 0,018 g. Also weder von   wir sind voll zufrieden.)

     

Sie können den Modus nicht bei jeder Änderung   veröffentlicht Merkmal der APIs. Schon seit   sie geben Beschleunigung als   Doppel, könnten sie theoretisch erlauben   eine Änderung im Modus, und sieht einfach auf   wenn der Modus Neuskalierung des A / D-Wert,   vor einer Beschleunigung berichten. (Das   offensichtlich Ort, um den Modus zu setzen wäre   in dem Ruf, der nach oben setzt die   Anwendungsbeschleunigungsmesser zu erhalten   Information.) Aber für Rückwärts   Kompatibilität würde das Betriebssystem   gesetzt den Beschleunigungsmesser-Modus 2 g bis +/-   zu Beginn der Anwendung.   Und keiner der Hintergrundprozesse   könnte erlaubt das einstellen   Beschleunigungsmesser-Modus.

Andere Tipps

Die aGauge App zeigt diese Rohdaten von dem Beschleunigungsmesser kommen, wie Sie das Gerät bewegen. Es können Sie auch die „Flip“ Schwelle für Ihr Gerät finden.

Ich habe die folgende Anwendung, um zu versuchen, die Bereiche zu testen ...

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

Das Problem ist, wenn ich meinen iPod entlang der horizontalen / vertikalen Achsen drehen und es dann umdrehen, ich Werte wie:

xmin -1,271802

xmax 1.180959

ymin -1,344477

ymax 1.108285

zmin -2,30713

zmax 2.325581

Wenn ich den iPod nehmen und schütteln das Heck aus, ich bekommen ...

x -2,325581 bis 2,307413

y -2,325581 auf 2,307413

z -2,307413 auf 2,325581

Alle Ideen, was es messen?

Das Beste, was ich habe kommen mit ist:

vertikale Achse

x = -1, wenn nach links geneigt (<|)

x = 1, wenn gekippt den ganzen Weg nach rechts (|>)

  • , wobei

y ~ -1, wenn Bildschirm zu Ihnen zeigt, senkrecht zum Boden ( "Aufstehen")

y ~ 1, wenn mit Blick weg von Ihnen (und auf dem Kopf)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top