如何在iOS设备周围获得适当的磁场x,y和z值?

时间:2015-04-03 09:48:26

标签: ios xcode swift ipad-2 magnetometer

我试图在我的iOS设备(iPad 2)周围获得磁场值。我一直在谷歌搜索这些主题很长时间,但我找不到任何正常工作的东西。

我试图制作像this这样的东西。

我阅读关于磁场的Apple文档如何获得价值有两个框架可以帮助我核心运动和核心位置但在我的情况下我将使用核心运动通过使用CMDeviceMotion和此属性获取我的设备周围的校准磁场CMCalibratedMagneticField

  

此属性返回的CMCalibratedMagneticField为您提供了   器件附近的总磁场没有器件偏置。

此代码以SWIFT编写

        let manager = CMMotionManager()
        var valX: Double!
        var valY: Double!
        var valZ: Double!
        var valAccuracy: Int32!
        if manager.deviceMotionAvailable{
            manager.deviceMotionUpdateInterval = .1
            manager.startDeviceMotionUpdatesToQueue(NSOperationQueue()){
                (data: CMDeviceMotion!, error: NSError!) in

                if let isError = error{
                    NSLog("Error: %@", isError)
                }
                valX = data.magneticField.field.x
                valY = data.magneticField.field.y
                valZ = data.magneticField.field.z
                valAccuracy = data.magneticField.accuracy.value


                if values != nil{
                    values!(x: valX, y: valY, z: valZ, accuracy: valAccuracy)
                }

                self.delegate?.getMagneticFieldFromDeviceMotion!(valX, y: valY, z: valZ)
            }

        } else {
            NSLog("Device Motion is not available")
        }

当我尝试在(IPad 2)中运行我的应用程序时,它返回x,y,z值,但它以疯狂的方式变化并且非常快!如果我在x轴上移动磁场也会改变! 我使用的是钕磁铁,当我用它时不小心它会损坏我的设备。

问题:

  1. 为什么当我试图移动磁铁x和y改变甚至我只改变x?
  2. 在开始准确的价值之前我必须做校准吗?
  3. 我必须将我的设备放在特定的情况下才能获得适当的价值?
  4. 我必须使用任何算法来过滤x,y和z?

0 个答案:

没有答案