Vidéo: 118 — «Accéléromètre» 2025
Un appareil iOS possède trois interfaces bien documentées pour les capteurs: l'accéléromètre, le gyroscope et le magnétomètre. Comme avec le capteur d'orientation, le processus pour ces capteurs commence en démarrant et en initialisant un écouteur qui écoute les événements de capteur. Voici le code de la méthode ViewDidLoad du contrôleur de vue Capteurs:
- (void) viewDidLoad {… accelerationTextView. enabled = NO; gyroscopeTextView. enabled = NO; magnétomètreTextView. enabled = NO; … // Configurer le gestionnaire de mouvement self-> motionManager = [[CMMotionManager alloc] init]; self-> motionManager. accelerometerUpdateInterval = 1; self-> motionManager. gyroUpdateInterval = 1; self-> motionManager. magnetometerUpdateInterval = 1; …}
L'objet qui vous donne accès aux événements de capteur est une instance de la classe CMMotionManager. Vous devez en créer une, et une seule, de cette classe (c'est-à-dire, vous devez la traiter comme un Singleton, même si ce n'est pas le cas). Ensuite, vous définissez des propriétés comme l'intervalle de mise à jour pour chacun des capteurs.
Ensuite, vous démarrez la surveillance en utilisant les méthodes startAccelerometerUpdatesToQueue, startGyroUpdatesToQueue et startMagnetometerUpdatesToQueue, comme indiqué dans la méthode startMonitoringSensors (qui est appelée lorsque vous appuyez sur le bouton Start Monitoring):
- (IBAction) startMonitoringSensors: (id) expéditeur {[self-> motionManager startAccelerometerUpdatesToQueue: [NSOperationQueue currentQueue] avecHandler: ^ (CMAccelerometerData * accelerometerData, erreur NSError *) {[selfhandAccelerationUpdates: accelerometerData. accélération];}]; [self-> motionManager startGyroUpdatesToQueue: [NSOperationQueue currentQueue] avecHandler: ^ (CMGyroData * gyroscopeData, erreur NSError *) {[selfhandGyroUpdates: gyroscopeData. rotationRate];}]; [self-> motionManager startMagnetometerUpdatesToQueue: [NSOperationQueue currentQueue] avecHandler: ^ (CMMagnetometerData * magnetometerData, erreur NSError *) {[selfhandMagnetometerUpdates: magnetometerData. magneticField];}];}
Chacune de ces méthodes est appelée avec un bloc de gestionnaire en ligne utilisant la construction withHandler. Ces blocs de gestionnaire en ligne appellent handleAccelerationUpdates, handleGyroUpdates et handleMagnetometerUpdates. Ces méthodes sont les suivantes:
- (void) handleAccelerationUpdates: (CMAcceleration) accelerationData {NSLog (@ "Accélération.x>% f% f% f 1. 0) || (accelerationData.x 1. 0) || (AccelerationData.y 1. 0) || (accelerationData. z% f% f% f 0. 5) || (gyroRotationRate.x 0. 5) || (gyroRotationRate. y 0. 5) || (gyroRotationRate. z% f% f% f% f 3000. 0) {savedX = champ magnétique. X; savedY = magneticField. y; savedZ = magneticField. z; [magnetometerTextView setText: @ "I SENSE QUELQUE CHOSE!"];} else {[magnetometerTextView setText: @ "ALL CLEAR!"];}}
Ces méthodes enregistrent les données brutes. Les lectures de capteur brutes affichées à l'aide de NSLog sont affichées ci-dessous.
Les méthodes de détection précédentes interprètent également les valeurs brutes du capteur pour générer la vue présentée ci-dessous.
Les capteurs utilisent des heuristiques pour fournir des aperçus significatifs:
-
L'accéléromètre mesure l'accélération des forces g, où 1 g-force est équivalente à l'attraction de la gravité terrestre.
Si l'accéléromètre détecte un mouvement supérieur à la force gravitationnelle de la Terre dans n'importe quelle direction, il affiche avec enthousiasme le message: JE VAIS VITE! Sinon, il affiche TROP LENT.
-
Le gyroscope mesure la rotation des trois axes de l'appareil en radians par seconde (1 radian par seconde signifie environ un sixième de rotation par seconde). Par conséquent, s'il détecte la plupart des rotations, il imprime WHEE!
-
Dans le code du magnétomètre, vous utiliseriez une heuristique distance pour détecter une grande variation du champ magnétique.
Si une telle modification se produit, l'application affiche I SENSE SINGLE HEING!
Si rien ne change pendant un intervalle, cela revient à penser que la côte est dégagée.
