1

I tried to get the magnometerData of the axis x,y and z. But it always return 0. The accuracy is -1.

That means that the motion isn't calibrated. But how can i calibrate it?

    func detect() {
       motionManager.startMagnetometerUpdates()
       motionManager.startDeviceMotionUpdates()

       var motion = CMDeviceMotion()
       //var mmd = CMMagnetometerData()
       motionManager.showsDeviceMovementDisplay = true
       if motionManager.deviceMotion != nil &&      motionManager.magnetometerData != nil{
           motion = motionManager.deviceMotion!
           //mmd = self.motionManager.magnetometerData!
           print("motion ", motion.magneticField.accuracy.rawValue)
           let _magfield = CMCalibratedMagneticField(field: motion.magneticField.field, accuracy: motion.magneticField.accuracy)
           print("_magfield ",_magfield.accuracy.rawValue)
           let magnetometerData = _magfield.field
           x.text = "X: " + String(format:"%f", magnetometerData.x)
           y.text = "Y: " + String(format:"%f", magnetometerData.y)
           z.text = "Z: " + String(format:"%f", magnetometerData.z)
           let _strenght = sqrt(pow(magnetometerData.x, 2) + pow(magnetometerData.y, 2) + pow(magnetometerData.z, 2))
           textarea.insertText("\n" +  String(format:"%.2f", _strenght))
    }
Athii
  • 559
  • 5
  • 19
  • Possible duplicate of [CoreMotion - magneticField is always 0](https://stackoverflow.com/questions/9556859/coremotion-magneticfield-is-always-0) – Tamás Sengel Oct 18 '18 at 14:03

0 Answers0