2016-05-05 2 views
0

J'essaie de trouver le moyen le plus précis pour détecter quand le téléphone avance et compte. Jusqu'à présent, j'ai été capable de compter chaque fois que l'accélération de l'accéléromètre dépasse un certain double, mais ce n'est pas très précis car tout ce que je dois faire pour faire monter le compteur, c'est incliner le téléphone vers l'avant. Comment puis-je réaliser ce que je veux? Dois-je ajouter plus de variables comme l'axe x ou z ou dois-je incorporer le gyroscope ou une autre fonction dans le téléphone que je n'utilise pas actuellement? MerciAccéléromètre pour détecter le mouvement du téléphone

Ceci est mon code à ce jour:

`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)" 

     } 

Répondre

1

Ce que vous pouvez faire est de calculer une amplitude d'accélération actuelle en utilisant la racine carrée de la somme des carrés pour x, y et z. Au repos, cette valeur sera constante (attraction gravitationnelle de la Terre), quelle que soit l'orientation du téléphone. Si quelqu'un frappe ou décroche le téléphone, alors cette magnitude changera temporairement et vous pourrez détecter ce delta. Vous devrez peut-être filtrer légèrement cette magnitude avant la détection en fonction de la petite taille du mouvement que vous essayez de détecter.

+0

Merci Je vais essayer ça. Hier, j'ai ajouté les axes x et z et cela a aidé à la précision. –