2009-04-06 17 views

Odpowiedz

5

Od iphonedevsdk.com:

akcelerometrów stosowana w pierwszym i iPhone'y drugiej generacji (i I zakładają również dotknięcia iPoda) działają w trybie w dwóch trybach: +/- 2 gi +/- 8 g. (Faktycznie, jak zaobserwowano, to raport przyspieszeń nieco poza zakres nominalny. Dokładność nie jest spec'ed poza tym przedziale, choć.)

Jabłko działa ich w +/- 2 g trybie . Istnieje kompromis: Aktualna rozdzielczość wynosi nominalnie 0,018 g, zgodnie z arkuszem danych (chociaż mój telefon iPhone pierwszej generacji używa 0.018168604, zgodnie ze zmodyfikowaną wersją AccelerometerGraph). W trybie +/- 8 g rozdzielczość będzie cztery razy większa.

Zakładam, że Apple zdecydowało, że lepsza rozdzielczość niż będzie bardziej przydatna niż w szerszym zakresie. (Wolałbym zobaczyć lepszą rozdzielczość niż 0,018 g. Tak więc żadna z nas jest w pełni usatysfakcjonowany.)

Nie można zmienić tryb z dowolnym opublikowanego cechą API. Od są przyspieszane jako podwójne, teoretycznie mogą pozwolić na zmianę trybu w trybie i po prostu spojrzeć na tryb podczas przeskalowywania wartości A/D, przed zgłoszeniem przyspieszenia. (The oczywiste miejsce, aby ustawić tryb byłby w zaproszeniu, które konfiguruje aplikację aby otrzymywać akcelerometr informacji). Jednak dla wstecznej kompatybilności , OS musiałoby ustawić tryb akcelerometr do +/- 2 g na początku aplikacji. Żaden z procesów w tle nie może pozwolić na ustawienie trybu przyspieszeniomierza .

1

stworzyłem następujący wniosek, aby spróbować przetestować zakresy ...

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

Problemem jest to, kiedy obrócić iPoda wzdłuż osi poziomej/pionowej, a następnie ją odwrócić, ja uzyskać wartości jak:

Xmin -1,271802

Xmax 1,180959

Ymin -1,344477

ymax 1,108285

Zmin -2,30713

zmax 2,325581

Jeśli wezmę iPod i wstrząsać do cholery z nim, mam ...

x -2,325581 do 2,307413

y -2,325581 do 2,307413

oo -2,307413 do 2.325581

Jakieś pomysły co to pomiarowych?

Najlepszym Mam wymyślić to:

pionowa oś

x = -1 jeśli przechylona na lewo (< |)

x = +1, jeśli przechylony na drodze po prawej (|>)

  • gdzie < jest sposobem w jaki ekran jest skierowany, a | jest dno iPod

r ~ -1, jeśli ekran jest tyłem do siebie, prostopadle do podłogi („stojąco”)

r ~ 1, jeżeli odwrócony od siebie (do góry i do dołu)

+0

To powinno być w innym pytaniu –

2

Aplikacja aGauge wyświetla te nieprzetworzone dane pochodzące z akcelerometru podczas przesuwania urządzenia. Może to również pomóc w znalezieniu progu "przerzucania" dla Twojego urządzenia.