Tag: 磁力计

iPod Touch 4G上的指南针磁力计

我明白从iPod Touch 4G上的CoreLocation框架中读取磁性读数是不可能的,但是可以使用CoreMotion框架来生成磁力读数。 我也明白,我需要使用CMMotionManager并设置deviceMotionUpdateInterval来实现这一点。 然后,我可以使用- (void)startMagnetometerUpdates和- (void)stopMagnetometerUpdates来启动和停止更新。 现在,我有我的原始磁力仪数据(x,y,z),我怎样才能使用它来实现磁场的方向? 我已经看到一些相当复杂的在线解释,但会喜欢例如代码。 编辑:我的错误,这是不可能得到的iPod Touch 4G的磁力计读数。

CMDeviceMotion为磁场返回0值

我正在开发具有指南针function的iOS应用程序。 我试图使用CMMagnetometerData更新,它给出未经校准,但正常的结果。 之后,我试图获得CMDeviceMotion更新,结果表明CMMagneticFieldCalibrationAccuracyUncalibrated精度始终为零磁场。 我唯一的设备是iPad,所以不能在别人身上testing。 由于传感器没有被校准,可能是场是零,但我找不到任何方法来执行校准。 如何解决这个问题? 更新: 这里build议使用startDeviceMotionUpdatesUsingReferenceFrame:toQueue:withHandler:但它不适合我。 build议将showsDeviceMovementDisplay设置为true 。 然而,它也没有工作,校准窗口只是没有popup。 最后, 解决 。 根据我的观察: 1)使用startDeviceMotionUpdatesUsingReferenceFrame:toQueue:withHandler: with referenceFrame不等于allZeros或XArbitraryZVertical 。 2)将showsDeviceMovementDisplay设置为true 。 经过精确的CMMagneticFieldCalibrationAccuracyUncalibrated准确的零值更新后,它将正常化。 码: … motionManager.deviceMotionUpdateInterval = 0.05 motionManager.showsDeviceMovementDisplay = true motionManager.startDeviceMotionUpdatesUsingReferenceFrame(CMAttitudeReferenceFrame.XArbitraryCorrectedZVertical, toQueue: NSOperationQueue.mainQueue(), withHandler:handleUpdate) … private func handleUpdate(data: CMDeviceMotion!, error: NSError!) { if data != nil { let field = data.magneticField.field println("\(field.x), \(field.y), \(field.z)") } […]