ios - 使用 Swift 编写 iOS 应用程序时在 iPhone 中获取奇怪的磁力计数据

标签 ios iphone swift magnetometer

我正在编写一个从磁力计读取数据的 iOS 应用程序。当我在两部 iPhone 上运行该应用程序时,它们正在创建奇怪的数据。

(所有数据均采用 [x, y, z] 表示法)一部 iPhone 5S 创造了大约 [100, 10, -100] 而另一部 iPhone 6S 创造了大约 [150, 225, -700]。当多次阅读并保持手机静止时,这些值会发生大约 10% 的变化,而当我转动它们时,它们几乎没有变化。

不过,真正的磁场应该在[0, -30, -30]左右(通过app测量)

为什么我会收到这些奇怪的数据? (我也测量了加速度计的数据,数据是正确的)

这是我项目的源代码: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

最佳答案

magnetometerData 是原始数据,未针对内部偏差和外部性(又名金属)进行校准,并且基本上没有意义。使用原始数据没有任何好处。基本上从来没有使用这些值的理由。

至少使用 CMDeviceMotion 的 magneticField。更好的是,询问与您的实际需求密切相关的信息。如果您想知道设备的航向,请询问。如果您想知道设备相对于磁北的方向,请提出要求。

关于ios - 使用 Swift 编写 iOS 应用程序时在 iPhone 中获取奇怪的磁力计数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47383128/

相关文章:

iOS 测试目标无法识别主应用程序的文件

iOS 如何启动图像选择器

html - 在iPhone中,键盘弹出时光标会停留在原来的位置

swift - 函数和下标之间有什么区别,特别是在下面的代码中?

ios - 如何打开设置对话框和子部分 iOS 11

ios - GMSMapView 中的 UITapGestureRecogniser

iOS - UI 测试检查视频是否播放

iphone - 如何在自定义 iPhone 应用程序中从垂直 View 旋转到水平 View

iphone - 在iPhone上从0到3保存数字长链(NSArray),这是一种有效的方法

ios - UITableView 自定义单元格数据在快速滚动时不匹配