iPhone上的加速器范围是什么?

时间:2009-04-06 18:24:15

标签: iphone accelerometer accelerator

我似乎无法在网上找到任何关于此的文档,我在谷歌搜索的内容给了我很多相互矛盾的信息......

3 个答案:

答案 0 :(得分:5)

来自iphonedevsdk.com

  

第一个使用的加速度计   和第二代iPhone(和我   假设iPod触摸操作   有两种模式:+/- 2 g和+/- 8 g。   (实际上,正如你所观察到的那样,他们   在某种程度上报告加速度   名义范围。准确性不是   但是,在这个范围之外的规格。)

     

Apple以+/- 2克的速度运行它们   模式。有一个权衡:当前   分辨率标称值为0.018克,   根据数据表(虽然我的   第一代iPhone使用   0.018168604,根据AccelerometerGraph的修改版本)。在里面   +/- 8 g模式,分辨率将是原来的四倍。

     我认为Apple决定更精细   分辨率比   范围更广。 (我宁愿看得更精细   分辨率大于0.018克。所以都不是   我们完全满意。)

     

您无法使用任何更改模式   已发布的API功能。以来   他们正在通过加速作为   加倍,他们理论上可以允许   改变模式,简单看一下   重新调整A / D值时的模式,   在报告加速之前。 (该   显而易见的地方设置模式   在通话中设置了   应用程序接收加速度计   信息。)但是,为了落后   兼容性,操作系统必须   将加速度计模式设置为+/- 2 g   在申请开始时。   并没有后台进程   可以被允许设置   加速度计模式。

答案 1 :(得分:2)

aGauge应用程序会在您移动设备时显示来自加速度计的原始数据。它还可以帮助您找到设备的“翻转”阈值。

答案 2 :(得分:1)

我创建了以下应用程序以尝试测试范围......

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并摇出它,我就会......

x -2.325581至2.307413

y -2.325581至2.307413

z -2.307413至2.325581

有什么想法吗?

我提出的最好的是:

垂直轴

如果向左倾斜(&lt; |)

,则

x = -1

如果向右倾斜(|&gt;)

,则x = +1
  • 其中&lt;是屏幕面对的方式,和是iPod的底部

y~-1如果屏幕朝向你,垂直于地板(“站起来”)

y~1如果背对着你(并且颠倒)