Domanda

Non riesco a trovare alcuna documentazione online su questo, e quello che sto googling mi sta dando un sacco di informazioni contrastanti ...

È stato utile?

Soluzione

iphonedevsdk.com :

  

Gli accelerometri utilizzati nel primo   e iPhones seconda generazione (e   assumere anche l'iPod touch) operano   in due modalità: +/- 2 g, e +/- 8 g.   (In realtà, come si osserva, si   accelerazioni rapporto un po 'al di fuori   campo nominale. La precisione non è   spec'ed al di fuori di tale intervallo, però.)

     

Apple li opera nel +/- 2 g   modalità. V'è un compromesso: la corrente   risoluzione è nominalmente 0,018 g,   secondo la scheda tecnica (anche se la mia   usi di iPhone di prima generazione   ,018,168604 millions, secondo una versione modificata di AccelerometerGraph). Nel   +/- 8 g modalità, la risoluzione sarebbe quattro volte più grossolana.

     

Presumo Apple ha deciso che il più fine   risoluzione sarebbe più utile   la gamma più ampia. (Preferisco vedere più fine   risoluzione di 0,018 g. Così nessuno di   noi è pienamente soddisfatto.)

     

Non è possibile cambiare la modalità con qualsiasi   caratteristica pubblicato delle API. Da   transitino accelerazione come   doppia, potrebbero teoricamente permettere   un cambiamento di modalità, e semplicemente guardare   la modalità quando riscalare il valore A / D,   prima di riportare l'accelerazione. (Il   ovvio posto per impostare la modalità sarebbe   nella chiamata che imposta la   applicazione per ricevere accelerometro   informazioni.) Tuttavia, per le versioni precedenti   compatibilità, il sistema operativo dovrebbe   impostare la modalità accelerometro a +/- 2 g   all'inizio dell'applicazione.   E nessuno dei processi in background   potrebbe essere permesso di impostare il   Modalità accelerometro.

Altri suggerimenti

L'applicazione visualizza aGauge questi dati grezzi provenienti dall'accelerometro come si sposta il dispositivo. Può anche aiutare a trovare la soglia di "flip" per il dispositivo.

ho creato la seguente applicazione per cercare di testare le gamme ...

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

Il problema è che, quando ho ruotare il mio iPod lungo gli assi orizzontale / verticale e quindi capovolgerla, ottengo valori come:

xmin -1,271802

Xmax 1.180959

ymin -1,344477

ymax 1.108285

zmin -2,30713

zmax 2.325581

Se prendo l'iPod e scuoto il heck fuori di esso, ottengo ...

x -2,325581 di 2,307,413 mila

y -2,325581 di 2,307,413 mila

z -2,307413 di 2,325,581 mila

Tutte le idee come si misura?

Il migliore che è venuta in mente è:

asse verticale

x = -1 se inclinato a sinistra (<|)

x = +1 se inclinato tutta la strada a destra (|>)

  • dove <è il modo in cui lo schermo sia rivolto, e | è la parte inferiore del iPod

y ~ -1 se lo schermo è rivolto verso, perpendicolare al piano ( "in piedi")

y ~ 1 se rivolto lontano da voi (e testa in giù)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top