锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

iOS 磁场传感器的应用 Swift CoreMotion使用

时间:2022-10-20 01:00:00 21磁场传感器

一:CoreMotion简介

CoreMotion该框架是苹果应对各种传感器的集合框架,可以方便地测量磁场、加速度等物理量。其核心部件是CoreMotion,使用时import这个包就够了。用于管理。CMMotionManager综合管理。

二:使用

磁场传感器的使用分为pull和push,前者实时收集所有数据,后者调用一次。pull方式:
注:这是通过的magneticField拿到x、y、z三轴磁感应强度(单位:微特斯拉)magneticField又是通过magnetometerData拿到的。

import UIKit import CoreMotion  class ViewController: UIViewController{ 
              var cm: CMMotionManager!;          @IBOutlet weak var textView: UITextView!     @IBOutlet weak var mLabel: UILabel!     @IBOutlet weak var progressX: UIProgressView!     @IBOutlet weak var progressY: UIProgressView!     @IBOutlet weak var progressZ: UIProgressView!          @IBAction func buttonListener(_ sender: Any) { 
                   self.cm.startMagnetometerUpdates()           if let magnetometerData = self.cm.magnetometerData { 
                      let magneticField = magnetometerData.magneticField              var text = "---Current Data of MagneticField---\n"              text  = "x: \(magneticField.x)\n"              text  = "y: \(magneticField.y)\n"              text  = "z: \(magneticField.z)\n"
             self.textView.text = text;
                    
             print(magneticField.x);
             print(magneticField.y);
             print(magneticField.z);
          }

    }
    
    override func viewDidLoad() { 
        
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        cm = CMMotionManager();
        
    }
    
    override func viewWillAppear(_ animated: Bool) { 
        
        cl.startUpdatingHeading();
    }

}


push方式:
说明:这里通过self.motionManager.magnetometerUpdateInterval = self.timeInterval设置时间刷新间隔,设置一个操作队列,并在其内判断self.cm.isMagnetometerActive布尔值来判断传感器是否活跃来获取

import UIKit
import CoreMotion

class ViewController: UIViewController{ 
        
    var cm: CMMotionManager!;
    
    @IBOutlet weak var textView: UITextView!
    @IBOutlet weak var mLabel: UILabel!
    @IBOutlet weak var progressX: UIProgressView!
    @IBOutlet weak var progressY: UIProgressView!
    @IBOutlet weak var progressZ: UIProgressView!
    
    
    let times: TimeInterval = 0.2;
    
    @IBAction func buttonListener(_ sender: Any) { 
        
        /* self.cm.startMagnetometerUpdates() if let magnetometerData = self.cm.magnetometerData { let magneticField = magnetometerData.magneticField var text = "---Current Data of MagneticField---\n" text += "x: \(magneticField.x)\n" text += "y: \(magneticField.y)\n" text += "z: \(magneticField.z)\n" self.textView.text = text; print(magneticField.x); print(magneticField.y); print(magneticField.z); } */
        startMagnetometerUpdates();
    }
    
    override func viewDidLoad() { 
        
        super.viewDidLoad()
        // Do any additional setup after loading the view.
       
        cm = CMMotionManager();
     
    }
    
    override func viewWillAppear(_ animated: Bool) { 
        
        cl.startUpdatingHeading();
    }
    
    func startMagnetometerUpdates() { 
        
            guard cm.isMagnetometerAvailable else { 
        
                self.textView.text = "\nCurrent device is not supported.\n"
                return
            }
             
        self.cm.magnetometerUpdateInterval = self.times;
             
            let queue = OperationQueue.current
            self.cm.startMagnetometerUpdates(to: queue!, withHandler: { 
        
                (magnetometerData, error) in
                guard error == nil else { 
        
                    print(error!)
                    return
                }
              
                if self.cm.isMagnetometerActive { 
        
                    if let magneticField = magnetometerData?.magneticField { 
        
                        var text = "---Current Data of Magnetic---\n"
                        text += "x: \(magneticField.x)\n"
                        text += "y: \(magneticField.y)\n"
                        text += "z: \(magneticField.z)\n"
                        self.textView.text = text
                        self.progressX.progress = Float(-magneticField.x / 10);
                        self.progressY.progress = Float(magneticField.y / 1000);
                        self.progressZ.progress = Float(-magneticField.z / 1000);
                    }
                }
            })
        }


}


锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章