CMCalibratedMagneticField不会更新

时间:2012-11-08 05:19:50

标签: iphone objective-c core-motion magnetometer

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

    }];

2 个答案:

答案 0 :(得分:3)

您检查过磁力计的准确度吗?我的猜测是你对motion.magneticField.accuracy的值是-1(未校准)。不幸的是我不知道为什么会这样。即使磁力计工作得很好,我的iPhone 4也是如此。

我能想到的唯一一件事就是手机在出厂前从未校准过,但这对我的4号比4S更有意义。校准的字段功能是iOS 5.0的新功能,于2011年10月公开发布,其中iPhone 4在一年前发布。但是你的手机和5.0一样出现了,所以人们会认为发布的硬件与它支持的软件功能相匹配。再一次,只是猜测。对不起,我无法提供更多帮助。希望你会找到一个真正的答案。我只是打算自己校准磁力计。

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

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

更新:我收到了iPhone 5并且CMCalibratedMagneticField工作正常。

答案 1 :(得分: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)];

}];