2017-11-19 7 views
-1

磁力計からデータを読み取るiOSアプリをプログラミングしています。 2つのiPhoneでアプリを実行すると、奇妙なデータが作成されています。Swiftを使ってiOSアプリをプログラミングするときにiPhoneで変な磁力計データを取得する

(すべてのデータは[x、y、z]表記)iPhone 5Sは約[100,10、-100]を作成し、別のiPhone 6Sは約[150,225,700]を作成します。複数回読んで電話を止めても、値は約10%シフトします。

しかし、実際の磁場は、なぜ私はこれらの奇妙なデータを取得しています

(アプリによって測定)[-30、-30、0]についてはすべきですか? 、私が何をしたか https://github.com/lxylxy123456/FGFS-Controller/

は基本的にこの

let motionManager = CMMotionManager() 
motionManager.startMagnetometerUpdates() 
if let magnetometerData = motionManager.magnetometerData { 
    mx = magnetometerData.magneticField.x 
    my = magnetometerData.magneticField.y 
    mz = magnetometerData.magneticField.z 
} 
Mx.text = Float(mx).description 
My.text = Float(my).description 
Mz.text = Float(mz).description 
+0

おそらく無関係ですが、浮動小数点数をラベルに表示するのに 'Float.description'を使用しないでください。文字列補間を使用するだけです。 'my.text =" \(mx) "' –

答えて

1

magnetometerDataは生データであるようなものです:

がここに私のプロジェクトのソースコードである(私はまた、加速度計からのデータを測定し、データが正確です)内部バイアスと外部性(金属とも言います)のために較正されておらず、本質的に無意味です。生データを使用するメリットはありません。基本的にこれらの値を使用する理由があります。

少なくとも、CMDeviceMotionのmagneticFieldを使用してください。さらに、あなたの実際のニーズに密接に関連する情報を求めてください。デバイスの見出しを知りたい場合は、それを聞いてください。磁気北を基準にしてデバイスの向きを知りたい場合は、それを尋ねます。

+0

アイデアはうまくいくようですが、正しい 'magneticField'(常に' [0、0、0] 'を返す)と' heading'常にCMDeviceMotionからの定数)。コアロケーションの見出しを使用して私の問題を解決しました –

+0

CMDeviceMotion見出しには、参照のノーザンフレームが必要です。 – matt

関連する問題