2

CMCalibratedMagneticField常に戻ります0

CMAcceleration値をCMMagnetometerData返し、値も返します。バイアスCMCalibratedMagneticFieldのない磁場なので、必要ありません。

私はiPhone4Sでテストしています。

[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(キャリブレーションされていない)になります。残念ながら、これがなぜなのかわかりません。磁力計は問題なく動作していますが、iPhone4でも同じことがわかります。

私が理解できる唯一のことは、電話が工場を出る前に調整されていなかったということですが、それはあなたの4Sよりも私の4の方が理にかなっています。キャリブレーションされたフィールド機能は、2011年10月に公開されたiOS 5.0の新機能でしたが、iPhone4は1年以上前にリリースされました。しかし、あなたの電話は5.0と一緒に出てきたので、リリースされるハードウェアはそれがサポートしていたソフトウェア機能と一致すると思うでしょう。繰り返しますが、単なる憶測です。申し訳ありませんが、これ以上お役に立てることはありません。うまくいけば、あなたは本当の答えを見つけるでしょう。磁力計を自分で校正するつもりです。

Freescaleは、これを行うための無料のツールを提供します。ソフトウェア(およびいくつかの有用なドキュメント)は、ここから入手できます。ダウンロードするには無料のアカウントを作成する必要があるかもしれませんが、思い出せません。

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 に答える