Я пытаюсь получить значение магнитного поля вокруг моего устройства iOS (iPad 2). Я долго гуглил об этих темах, но не мог найти ничего, что работало бы должным образом.
я пытаюсь сделать что-то вроде этого.
я прочитал документацию 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, также меняется и y!! Я использую неодимовый магнит, я был очень осторожен, когда использую его, чтобы он не навредил моему устройству.
Вопросы:
- почему, когда я пытаюсь переместить магнит, x и y меняются, даже если я меняю только x?
- я должен сделать калибровку, прежде чем я начну иметь точное значение?
- я должен поместить свое устройство в определенную ситуацию, чтобы получить правильное значение?
- есть ли какой-либо алгоритм, который я должен использовать для фильтрации x, y и z?