Каковы диапазоны акселератора на iPhone?

Вы можете использовать оператор of, который будет возвращать список переменных всех пород B и C

let varsForBs [var] of B-here
let varsForCs [var] of C-here

Если у вас есть только один B и C, вы можете просто взять первый элемент из список.

5
задан Jeffrey Berthiaume 6 April 2009 в 18:24
поделиться

3 ответа

Из iphonedevsdk.com:

Акселерометры использовали в первом поколении и втором поколении iPhone (и я принимаю также касания iPod), работают в двух режимах: +/-2 г, и +/-8 г. (На самом деле, как Вы заметили, они сообщают об ускорениях несколько вне номинального диапазона. Точность не является spec'ed вне того диапазона, все же.)

Apple управляет ими в +/-2-граммовый режим. Существует компромисс: текущее разрешение - номинально 0,018 г, согласно таблице данных (хотя мое первое поколение iPhone использует 0.018168604, согласно измененной версии AccelerometerGraph). В +/-8-граммовый режим, разрешение было бы в четыре раза более сырым.

Я предполагаю, что Apple решила, что более прекрасное разрешение будет более полезным, чем более широкий диапазон. (Я видел бы более прекрасное разрешение, чем 0,018 г. Таким образом, ни один из нас полностью не удовлетворен.)

Вы не можете изменить режим ни с какой опубликованной функцией API. Так как они передают ускорение как двойное, они могли теоретически позволить изменение в режиме и просто посмотреть на режим при перемасштабировании значения A/D перед сообщением об ускорении. (Очевидное место для установки режима было бы в вызове, который настраивает приложение для получения информации об акселерометре.) Однако для обратной совместимости, ОС должна была бы установить режим акселерометра на +/-2 г в начале приложения. И ни одному из фоновых процессов нельзя было позволить установить режим акселерометра.

6
ответ дан 14 December 2019 в 01:17
поделиться

Я создал следующее приложение, чтобы попытаться проверить диапазоны...

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

Проблема, когда я поворачиваю свой iPod вдоль горизонтальных/вертикальных осей и затем переворачиваю его, я получаю значения как:

xmin-1.271802

xmax 1.180959

ymin-1.344477

ymax 1.108285

zmin-2.30713

zmax 2.325581

Если я беру iPod и встряхиваю heck из него, я добираюсь...

x-. 325581 к 2,307413

y-. 325581 к 2,307413

z-. 307413 к 2,325581

Какие-либо идеи, что это измеряет?

Лучшее, которое я придумал:

вертикальная ось

x =-1, если наклонено налево (<|)

x = +1, если наклонено полностью направо (|>)

  • где <способ, которым стоит экран, и | нижняя часть iPod

y ~-1, если экран стоит перед Вами, перпендикуляром на пол ("выдерживание")

y ~ 1 при отворачивании от Вас (и вверх тормашками)

1
ответ дан 14 December 2019 в 01:17
поделиться

The aGauge app displays this raw data coming from the accelerometer as you move the device. It can also help you find the "flip" threshold for your device.

2
ответ дан 14 December 2019 в 01:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: