我似乎无法在网上找到任何关于此的文档,我在谷歌搜索的内容给了我很多相互矛盾的信息......
答案 0 :(得分:5)
第一个使用的加速度计 和第二代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 = +1y~-1如果屏幕朝向你,垂直于地板(“站起来”)
y~1如果背对着你(并且颠倒)