2016-05-05 6 views
0

Я пытаюсь выяснить наиболее точный способ определения, когда телефон движется вперед и подсчитывает его. До сих пор я мог рассчитывать каждый раз, когда ускорение акселерометра y ускоряется выше определенного двойного, но это не очень точно, поскольку все, что мне нужно сделать, чтобы счетчик поднялся, - это наклонить телефон вперед, вместо того, чтобы фактически переместить телефон. Как я могу достичь того, чего хочу? Должен ли я добавлять дополнительные переменные, такие как ось x или z, или мне нужно включить гироскоп или другую функцию в телефоне, которую я в настоящее время не использую? БлагодаряАкселерометр для обнаружения движения телефона

Это мой код до сих пор:

`override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     motionManager.accelerometerUpdateInterval = 0.1 

     motionManager.startAccelerometerUpdatesToQueue(NSOperationQueue.currentQueue()!, withHandler: { (accelerometerData: CMAccelerometerData?, error: NSError?) -> Void 
      in 

      self.outputAccelData(accelerometerData!.acceleration) 
      if error != nil { 

       print(error) 

      } 

     }) 
    func outputAccelData(acceleration: CMAcceleration) { 


      if acceleration.y > 0.3 { 

       countInt += 1 

      } 

      count.text = "\(countInt)" 

     } 

ответ

1

Что вы можете сделать, это рассчитать величину тока ускорения с помощью квадратного корня из суммы квадратов для х, у, г. В покое это значение будет постоянным (гравитационное притяжение Земли) независимо от того, как ориентирован телефон. Если кто-то ударит или подберет телефон, тогда эта величина временно изменится, и вы сможете обнаружить эту дельту. Возможно, вам придется немного отфильтровать эту величину до обнаружения в зависимости от того, насколько малы движение, которое вы пытаетесь обнаружить.

+0

Спасибо Я собираюсь попробовать это. Вчера я добавил оси x и z, и это помогло с точностью. –

Смежные вопросы