L'accélération due à la gravité sera toujours présente. Il semble que vous soustrayez cette valeur de l'un des axes lorsque le périphérique est dans une orientation particulière. Ce que vous devrez faire pour détecter les gestes est de détecter la petite différence qui apparaît momentanément de l'accélération due à la gravité lorsque les dispositifs commencent à bouger. Vous ne serez pas en mesure de détecter si l'appareil est immobile ou se déplace à une vitesse constante, mais vous serez en mesure de déterminer s'il tourne ou s'il accélère.
Les valeurs (x, y, z) vous donnent un vecteur qui indique la direction de l'accélération. Vous pouvez calculer la longueur (carrée de) de ce vecteur comme x^2 + y^2 + x^2. Si c'est la même chose que lorsque l'appareil est au repos, alors vous savez que l'appareil n'est pas accéléré, mais dans une certaine orientation. (Soit au repos, ou se déplaçant à une vitesse constante.
Pour détecter un mouvement, vous devez remarquer le changement momentané de la longueur de ce vecteur lorsque l'appareil commence à bouger, et à nouveau lorsqu'il est arrêté. Ce changement sera probablement minuscule par rapport à la gravité.
Vous devrez comparer l'orientation du vecteur d'accélération pendant le mouvement pour déterminer la direction du mouvement. Notez que vous ne serez pas capable de distinguer chaque geste. Par exemple, déplacer l'appareil vers l'avant (et s'arrêter là) a le même effet que d'incliner légèrement l'appareil, puis de le ramener à la même orientation.
Les gestes les plus faciles à détecter sont ceux qui modifient l'orientation de l'appareil. D'autres gestes, comme un mouvement de frappe, seront plus difficiles à détecter. Ils apparaîtront comme un changement dans la longueur du vecteur d'accélération, mais la quantité de changement sera probablement minuscule.
EDIT:
La discussion ci-dessus est pour les valeurs normalisées de x, y et z. Vous aurez besoin de déterminer les valeurs à soustraire des lectures pour obtenir le vecteur. D'un commentaire ci-dessus, il semble que 766 sont les valeurs "zéro" à soustraire. Mais ils peuvent être différents pour les différents axes de votre appareil. Mesurez les lectures avec les appareils orientés dans les six directions. C'est obtenir les valeurs maximum et minimum pour x, y et z. Les valeurs centrales devraient être à mi-chemin entre les extrêmes (et, espérons-le, 766).
Certains gestes auront des signatures révélatrices. Si vous laissez tomber l'appareil, vous réduisez momentanément le vecteur d'accélération, puis vous l'augmentez momentanément lorsque l'appareil est arrêté.
L'élévation de l'appareil augmentera momentanément le vecteur, avant de le diminuer momentanément. Un mouvement vers l'avant augmente le vecteur momentanément, mais inclinez-le légèrement vers l'avant, puis augmentez-le momentanément, mais incliné vers l'arrière lorsque l'appareil est arrêté.
La plupart du temps, la longueur du vecteur sera égale à l'accélération due à la gravité.
Vous devez dire quel type de sortie que vous require – teabot
Voulez-vous dire: vous changez la direction de l'appareil et les numéros deviennent non-zéro même s'il ne bouge pas OU voulez-vous dire que vous changez la direction de l'appareil et les numéros sont éteints lorsque vous le déplacez de cette nouvelle position? – colithium
Merci, si je change l'orientation de l'appareil, les valeurs sont modifiées (non nulles) même si l'appareil ne bouge pas. Sortie Je demande (x, y, z) d'être (0,0,0) si l'appareil ne bouge pas.Pour rendre l'orientation (directionnelle) indépendante, – Madni