Jaké jsou rozsahy akcelerátoru na iPhone?

hlasů
5

Nedaří se mi najít žádnou dokumentaci on-line o tom, a to, co jsem googling mi dává spoustu protichůdných informací ...

Položena 06/04/2009 v 19:24
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
5

Od iphonedevsdk.com :

Akcelerometry používané v iPhone první a druhé generace (a předpokládám také iPod dotýká), pracovat ve dvou režimech: +/- 2 g, a +/- 8 g. (Ve skutečnosti, jak jste poznamenal, že nahlásit zrychlení poněkud mimo nominálního rozsahu. Přesnost není spec'ed mimo tento rozsah, ačkoli.)

Apple operuje je v režimu +/- 2 g. Tam je kompromis: Aktuální rozlišení je nominálně 0,018 g, podle listu (i když moje první generace iPhone používá 0.018168604, podle modifikované verzi AccelerometerGraph). V režimu g +/- 8, rozlišení bude čtyřikrát hrubší.

Domnívám se Apple rozhodl, že rozlišení jemnější by bylo užitečnější než širším rozsahu. (Raději bych vidět jemnější rozlišení, než 0,018 g. Takže ani jeden z nás není zcela spokojen.)

Nemůžete změnit režim s jakýmkoliv zveřejněným rys API. Vzhledem k tomu, že jsou prochází zrychlení jako double, mohli by teoreticky umožnit změnu režimu, a prostě se dívat na módu, kdy rescaling A / D hodnota A, před vykazováním zrychlení. (Zřejmé místo k nastavení režimu bude ve výzvě, která zřizuje aplikaci přijímat Akcelerometr informací). Nicméně z důvodu zpětné kompatibility OS bude muset nastavit režim akcelerometru až +/- 2 g na začátku aplikace. A žádný z procesů na pozadí by mohlo být umožněno nastavit režim akcelerometru.

Odpovězeno 06/04/2009 v 19:26
zdroj uživatelem

hlasů
1

Vytvořil jsem následující aplikaci, aby se pokusili vyzkoušet rozsahy ...

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

Problém je, že když jsem se otočit svůj iPod podél horizontální / vertikální osy a poté jej převrátit, mám hodnoty jako:

xmin -1,271802

xmax 1.180959

yMin -1,344477

ymax 1.108285

zmin -2,30713

zmax 2.325581

Mám-li mít iPod a třepe sakra z ní, jsem si ...

x -2,325581-2,307413

y -2,325581-2,307413

z -2,307413-2,325581

Nějaké nápady, co se to měří?

Nejlepší, co jsem přijít s je:

svislé osy

x = -1, pokud je nakloněn doleva (<|)

x = 1, pokud je nakloněn úplně vpravo (|>)

  • kde <je způsob, aby obrazovka směřovala, a | je spodní část iPodu

y ~ -1, pokud obrazovka je k sobě kolmo k podlaze ( „vestoje“)

y ~ 1-li směrem od sebe (a obráceně)

Odpovězeno 06/04/2009 v 19:30
zdroj uživatelem

hlasů
2

Tyto aplikace se zobrazí aGauge tato nezpracovaná data přicházející z akcelerometru, jak budete pohybovat zařízení. To může také pomoci najít „fanda“ práh pro váš přístroj.

Odpovězeno 28/06/2009 v 06:09
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more