Một trongnhững thứ mà tôi cảm thấy tuyệt vời nhất đối với một chiếc smartphone là nó có khả năng cảm ứng chuyển động và hướng. Với các thiết bị của Apple bạn có thể sử dụng cảm biến gia tốc(Accelerometers) và cảm biến con quay hồi chuyển(Gyroscopes) theo 3 trục x, y, z. Trong bài viết này chúng ta sẽ cùng nhau tạo ra một ứng dụng nhỏ để tìm hiểu qua về chúng.
Bạn đang xem: Accelerometer là gì
I)Tạo giao diện
-Giao diện của chúng ta sẽ làm một cách đơn giản nhất để có thể hiển thị 12 vía trị. Chúng ta sẽ theo dõi được giá trị cao nhất giá trị hiện tại của Acceleration và góc xoay theo chiều trục X, Y, Z.
-Sau khi tạo project mới các bạn vào storyboards.
-Ở storyboards các bạn kéo 25 labels vào view. Chúng ta sẽ lấy ra 12 labels để hiển thị dữ liệu về mỗi trục X, Y, Z. Các bạn bạn thay đổi tên các labels và thêm 1cái nút theo hình dưới đây.
![*](https://licadho.org/wp-content/uploads/2021/06/imager_1_25056_700.jpg)
Tiếp theo chúng ta sẽ liên kết các đối tượng ngoài view vào trong file viewcontroller. Các bặt đặt tên tương ứng với các đôi tượng ngoài viewvà action của nút các bạn đặt tên resetMaxValue.
import CoreMotionclass ViewController: UIViewController{
IBOutlet weak var rollLabel: UILabel!
IBOutlet weak var pinchLabel: UILabel!
IBOutlet weak var yawLabel: UILabel!
IBOutlet var accX: UILabel!
IBOutlet var accY: UILabel!
IBOutlet var accZ: UILabel!
IBOutlet var maxAccX: UILabel!
IBOutlet var maxAccY: UILabel!
IBOutlet var maxAccZ: UILabel!
IBOutlet var rotX: UILabel!
IBOutlet var rotY: UILabel!
IBOutlet var rotZ: UILabel!
IBOutlet var maxRotX: UILabel!
IBOutlet var maxRotY: UILabel!
IBOutlet var maxRotZ: UILabel!
IBAction func resetMaxValues(sender: AnyObject) { }}
II) Cảm biến gia tốc(Accelerometer) và Cảm biến con quay hồi chuyển(Gyroscope)
Cảm biến gia tốc(Accelerometer)
–Cảm biến gia tốc nó được sử dụng để đo gia tốc theo 3 chiều có nghĩa là ví dụ bạn lắc thiết bị mạnhthì giá trị các trục của nó cao và người lại.
-Khi thiết bị của bạn đặt trên bàn với mặt hình hướng lên trên thì máy đo gia tốc sẽ có giá trị là -1G theo chiều Z, và nếu mặt điện thoại úp xuống thì nó có giá trị 1G theo chiều Z.
-Nếu bạn giữ thẳng đứng chiếc điện thoại thì giá trị sẽ là -1G theo trục Y và xoay ngược lại thì sẽ là 1G. Tương tự khi bạn để màn hình điện thoại trước mặt mà xoay 1 góc 90 độ về bên trái thì bạn sẽ nhận được giá trị -1G theo trục X và ngược lại nếu quay bên phải bạn sẽ nhận giá trị là 1G.
Xem thêm: Fortified Là Gì – 3 Điều Sommelier Cần Biết Về Fortified Wine
![*](https://licadho.org/wp-content/uploads/2021/06/imager_2_25056_700.jpg)
Cảm biến con quay hồi chuyển(Gyroscope)
-Con quay hồi chuyển cảm biến được góc quay giữa các trục XYZ. Cùng với accelerometer là 2 công cụ cơ bản để cảm biến hành động.
III)Viết mã để test
Trong bài hướng dẫn này chúng ta sẽ sử dụng CoreMotion. Để thêm Core Motion vào ứng dụng ở target của ứng dụng ở Linked Frameworks and Libraries các bạn thêm Core Motion.
Bây giờ các bạn import Core Motion vào file ViewController. Tiép theo chúng ta sẽ thêm một số biến toàn cục có kiểu double để lưu giá trị max của cảm biến gia tốc và sau đó chúng ta tạo thêm một thuộc tính có kiểu CMMotionManager.
Dưới đây là đoạn mã của file ViewController:
//Instance Variables var currentMaxAccelX: Double = 0.0 var currentMaxAccelY: Double = 0.0 var currentMaxAccelZ: Double = 0.0 var currentMaxRotX: Double = 0.0 var currentMaxRotY: Double = 0.0 var currentMaxRotZ: Double = 0.0 var movementManager = CMMotionManager() //Outlets
IBOutlet var accX: UILabel!
IBOutlet var accY: UILabel!
IBOutlet var accZ: UILabel!
IBOutlet var maxAccX: UILabel!
IBOutlet var maxAccY: UILabel!
IBOutlet var maxAccZ: UILabel!
IBOutlet var rotX: UILabel!
IBOutlet var rotY: UILabel!
IBOutlet var rotZ: UILabel!
IBOutlet var maxRotX: UILabel!
IBOutlet var maxRotY: UILabel!
IBOutlet var maxRotZ: UILabel!
IBAction func resetMaxValues(sender: AnyObject) { }Tiếp theo chúng ta sẽ khởi tạo giá trị cho các biến:
override func viewDidLoad() { currentMaxAccelX = 0 currentMaxAccelY = 0 currentMaxAccelZ = 0 currentMaxRotX = 0 currentMaxRotY = 0 currentMaxRotZ = 0 movementManager.gyroUpdateInterval = 0.2 movementManager.accelerometerUpdateInterval = 0.2 //Start Recording Data movementManager.startAccelerometerUpdatesToQueue(NSOperationQueue.currentQueue()!) { (accelerometerData: CMAccelerometerData?, NSError) -> Void in self.outputAccData(accelerometerData!.acceleration) if(NSError != nil) { print(“(NSError)”) } } movementManager.startGyroUpdatesToQueue(NSOperationQueue.currentQueue()!, withHandler: { (gyroData: CMGyroData?, NSError) -> Void in self.outputRotData(gyroData!.rotationRate) if (NSError != nil){ print(“(NSError)”) } }) }Trong đoạn mã này, chúng ta đâu tiên set giá trị 0 cho kiểu double. Sau đó chúng ta khởi tạo biến motionManager, tiếp theo chúng ta cập nhật khoảng thời gian cập nhật theo mini giây.
Tiếp theo chúng ta gọi phương thức startAccelerometerUpdatesToQueue từ biến motionManager, phương thức trên sẽ nói cho thuộc tính motionManger bắt đầu gửi các cảm biến gia tốc….
Tiếp theo chúng ta sẽ gọi các phương thức outputAccelertionData để cập nhật dữ liệu lên giao diện.
Dưới đây là code của 2 phương thức:
func outputAccData(acceleration: CMAcceleration){ accX?.text = “(acceleration.x).2fg” if fabs(acceleration.x) > fabs(currentMaxAccelX) { currentMaxAccelX = acceleration.x } accY?.text = “(acceleration.y).2fg” if fabs(acceleration.y) > fabs(currentMaxAccelY) { currentMaxAccelY = acceleration.y } accZ?.text = “(acceleration.z).2fg” if fabs(acceleration.z) > fabs(currentMaxAccelZ) { currentMaxAccelZ = acceleration.z } maxAccX?.text = “(currentMaxAccelX).2f” maxAccY?.text = “(currentMaxAccelY).2f” maxAccZ?.text = “(currentMaxAccelZ).2f” } func outputRotData(rotation: CMRotationRate){ rotX?.text = “(rotation.x).2fr/s” if fabs(rotation.x) > fabs(currentMaxRotX) { currentMaxRotX = rotation.x } rotY?.text = “(rotation.y).2fr/s” if fabs(rotation.y) > fabs(currentMaxRotY) { currentMaxRotY = rotation.y } rotZ?.text = “(rotation.z).2fr/s” if fabs(rotation.z) > fabs(currentMaxRotZ) { currentMaxRotZ = rotation.z } maxRotX?.text = “(currentMaxRotX).2f” maxRotY?.text = “(currentMaxRotY).2f” maxRotZ?.text = “(currentMaxRotZ).2f” }Và cuối cùng chúng ta sẽ cần là viết mã cho nút resetMaxValues:
IBAction func resetMaxValues(sender: AnyObject) { currentMaxAccelX = 0 currentMaxAccelY = 0 currentMaxAccelZ = 0 currentMaxRotX = 0 currentMaxRotY = 0 currentMaxRotZ = 0 }Nếu bạn chạy bạn có thể thấy màn hình như dưới đây, nhưng chú ý các bạn sẽ phải chạy ở thiết bị thật.
Xem thêm: Thuê Nhà Royal City Giá Rẻ, Cho Thuê Chung Cư Royal City:
![*](https://licadho.org/wp-content/uploads/2021/06/imager_3_25056_700.jpg)
Nguồn bài viết
Khóa học lập trình di động tại thienmaonline.vn:
Đểcài đặt MacOSX lên phần cứng không phải Apple liên hệ chuyên gia cài Hackintosh:
Nguyễn Minh Sơn: 01287065634Huỳnh Minh Sơn: 0936225565
Tham gia ngaykhoá học lập trình iOS, hình thức học tập rất linh hoạt cho bạn lựa chọn và sẽ có mức học phí khác nhau tuỳ theo bạn chọn học Online, Offline hoặc FlipLearning(Kết hợp giữa Online và Offline). Ngoài ra bạn có thể tham giathực tập toàn thời gian tại thienmaonline.vnđể rút ngắn thời gian học và tăng cơ hội việc làm.
Chuyên mục: Hỏi Đáp