2

CMCalibratedMagneticField一直返回0

CMAcceleration返回值,CMMagnetometerData也返回值。只是CMCalibratedMagneticField不需要,我需要它,因为它是没有偏差的磁场。

我在 iPhone 4S 上进行测试。

[MotionManager startDeviceMotionUpdatesToQueue:deviceQueue
                                   withHandler:^(CMDeviceMotion *motion, NSError *error) {
        CMCalibratedMagneticField f = motion.magneticField;

        //CMMagneticField t = motion.;
        //CMAcceleration s = motion.gravity; Works!
        //_xlabelnew.text = [NSString stringWithFormat:@"%f", s.x];

        _xlabelnew.text = [NSString stringWithFormat:@"%f", f.field.x];
        _ylabelnew.text = [NSString stringWithFormat:@"%f", f.field.y];
        _zlabelnew.text = [NSString stringWithFormat:@"%f", f.field.z];

        //_totallabelnew.text = [NSString stringWithFormat:@"%f", sqrt(f.field.x*f.field.x + f.field.y*f.field.y + f.field.z*f.field.z)];

    }];
4

2 回答 2

3

你检查过磁力计的精度吗?我的猜测是您对 motion.magneticField.accuracy 的值将是-1(未校准)。不幸的是,我不知道为什么会这样。即使磁力计工作正常,我的 iPhone 4 也得到了同样的结果。

我唯一能想到的是手机在出厂前从未校准过,但这对我的 4 来说比对你的 4S 更有意义。校准现场功能是 2011 年 10 月公开发布的 iOS 5.0 的新功能,而 iPhone 4 是一年多前发布的。但是你的手机是随着 5.0 发布的,所以人们会认为发布的硬件会匹配它所支持的软件功能。再次,只是猜测。抱歉,我无法提供更多帮助。希望你能找到真正的答案。我只是打算自己校准磁力计。

飞思卡尔为此提供了免费工具。该软件(和一些有用的文档)可在此处获得。您可能需要创建一个免费帐户才能下载它,但我不记得了。

http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=eCompass

更新:我拿到了一部 iPhone 5,CMCalibratedMagneticField 工作得很好。

于 2013-01-15T06:34:00.113 回答
0
[MotionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXArbitraryCorrectedZVertical toQueue:deviceQueue
                               withHandler:^(CMDeviceMotion *motion, NSError *error) {
    CMCalibratedMagneticField f = motion.magneticField;

    //CMMagneticField t = motion.;
    //CMAcceleration s = motion.gravity; Works!
    //_xlabelnew.text = [NSString stringWithFormat:@"%f", s.x];

    _xlabelnew.text = [NSString stringWithFormat:@"%f", f.field.x];
    _ylabelnew.text = [NSString stringWithFormat:@"%f", f.field.y];
    _zlabelnew.text = [NSString stringWithFormat:@"%f", f.field.z];

    //_totallabelnew.text = [NSString stringWithFormat:@"%f", sqrt(f.field.x*f.field.x + f.field.y*f.field.y + f.field.z*f.field.z)];

}];
于 2013-08-23T02:02:43.613 回答