2011-09-29 4 views
0

Je crée une application de test qui reçoit le tangage, le roulis et le lacet du gyroscope.Les mises à jour du gyroscope ne démarrent pas

Ce code ne fonctionne pas comme je pense que ce serait:

- (void) enableGyro { 
    motionManager.deviceMotionUpdateInterval = 1.0/30.0; 
    if (motionManager.gyroAvailable) { 
     [motionManager startGyroUpdates]; 
    } 
    NSLog(@"Gyro Available? %@", (motionManager.gyroAvailable ? @"YES" : @"NO")); 
    NSLog(@"Gyro Active? %@", (motionManager.gyroActive ? @"YES" : @"NO")); 
} 

La sortie de c'est

2011-09-29 16:37:08.070 Gyro2[4014:607] Gyro Available? YES 
2011-09-29 16:37:08.074 Gyro2[4014:607] Gyro Active? NO 

Je ne comprends pas pourquoi, quand je commence les mises à jour du gyroscope, il ne démarre pas réellement.

+0

Désolé les gars, je ne suis pas sûr de ce que le problème était mais je viens de réécrire le projet de test et cela a fonctionné. Je me suis basé sur le code de ce site: http://cs491f10.wordpress.com/2010/10/28/core-motion-gyroscope-example/ – SamB

Répondre

0

Si vous voulez vraiment utiliser les données des capteurs impartiales brutes, vous devez définir l'intervalle de mise à jour de chaque capteur indépendamment bien qu'ils seront souvent la même valeur:

motionManager.gyroUpdateInterval = myGyroInterval; 
motionManager.accelerometerUpdateInterval = myAccelerometerInterval; 

Le deviceMotionUpdateInterval est lié aux mouvements de l'appareil seulement .

La plupart des gens ne veulent pas gérer le traitement des données de capteur avec le filtre de Kalman, etc., mais seulement l'orientation actuelle de l'appareil. Si c'est le cas, jetez un oeil à Simple iPhone motion detect. La seule situation où j'ai vu les valeurs des méthodes xxxActive de CMMotionManager ne signalait pas que l'état correct mettait l'application en arrière-plan et l'activait à nouveau lorsque la gestion de mouvement se faisait dans son propre NSThread. Je pense que cela se rapportait à certaines actions effectuées par le système d'exploitation peut-être combiné avec le type de condition de course. L'astuce est alors de libérer l'instance CMMotionManager et d'en allouer une nouvelle.

0

Selon la documentation (http://developer.apple.com/library/ios/#DOCUMENTATION/CoreMotion/Reference/CMMotionManager_Class/Reference/Reference.html), gyroActive ne sera vrai si vous avez appelé ou startGyroUpdatesToQueue:withHandler:startGyroUpdates. Même si startDeviceMotionUpdates utilise le gyroscope, il ne définit pas gyroActive.

+0

je l'ai aussi changé dans le post – SamB

Questions connexes