Calibrer l'accelerometre : comment faire ?

HerveViHerveVi Membre
12:51 modifié dans API UIKit #1
Bonjour à  tous,

Mon projet actuel consiste à  balader une cible sur l'iphone...
J'utilise l'accelerometre pour faire cela.

Tout marche a peu pres correctement mais pour l'instant, il faut tenir l'iPhone à  plat.
Si on le tient à  45° ca ne va pas.

Il faut donc que j'arrive à  calibrer ce *!?*$ d'accelerometre.

Je pensais cela simple, mais pas tant que cela.
Je me suis tapé les exemples fournis par Apple (genre BubbleLevel)
où ils calibrent l'accelerometre, mais eux ne calibrent que l'angle.

ce n'est pas la meme chose, en tout cas c pas ce que je veux
(ou alors j'ai vraiment rien compris, ce qui est possible aussi).

moi je pensais connement qu'il suffisait d'ajouter un delta sur accelerometerValues[0] et accelerometerValues[1]
mais non, ca marche pas ca.

si quelqu'un pouvait m'aiguiller, ce serait bien cool.

voici le code utilisé pour deplacer la cible :
(tick est appelé toutes les 0.2 secondes)

<br />- (void) tick<br />{<br />&nbsp; &nbsp; float&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dTime;<br />&nbsp; &nbsp; CFTimeInterval&nbsp; &nbsp; &nbsp; &nbsp; time;<br />&nbsp;  <br />&nbsp; &nbsp; time = CFAbsoluteTimeGetCurrent();<br />&nbsp; &nbsp; dTime = time - lastTime;<br />&nbsp;  <br />&nbsp; &nbsp; float accelerationX = (accelerometerValues[1]) * dTime * 1000; // c&#39;est bien [1] car jeu est mode landscape<br />&nbsp; &nbsp; float accelerationY = (accelerometerValues[0]) * dTime * 1000; // c&#39;est bien [0] car jeu est mode landscape<br />&nbsp;  <br />&nbsp; &nbsp; float newX=m_TargetImgView.center.x+accelerationX;<br />&nbsp; &nbsp; float newY=m_TargetImgView.center.y+accelerationY;<br />&nbsp;  <br />&nbsp; &nbsp; if (newX &lt; 0)<br />&nbsp; &nbsp; &nbsp; &nbsp; newX=0;<br />&nbsp; &nbsp; else if (newX &gt; 480)<br />&nbsp; &nbsp; &nbsp; &nbsp; newX = 480;<br />&nbsp;  <br />&nbsp; &nbsp; if (newY &lt; 0)<br />&nbsp; &nbsp; &nbsp; &nbsp; newY=0;<br />&nbsp; &nbsp; else if (newY &gt; 320)<br />&nbsp; &nbsp; &nbsp; &nbsp; newY = 320;<br />&nbsp;  <br />&nbsp; &nbsp; m_TargetImgView.center=CGPointMake(newX,newY);<br />&nbsp;  <br />&nbsp; &nbsp; lastTime = time;<br />}<br />


voici le code de l'accelerometre :

<br />// UIAccelerometer delegate method, which delivers the latest acceleration data.<br />- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {<br />&nbsp; &nbsp; // Use a basic low-pass filter to only keep the gravity in the accelerometer values for the X and Y axes<br />&nbsp; &nbsp; accelerometerValues[0] = acceleration.x * kFilteringFactor + accelerometerValues[0] * (1.0 - kFilteringFactor);<br />&nbsp; &nbsp; accelerometerValues[1] = acceleration.y * kFilteringFactor + accelerometerValues[1] * (1.0 - kFilteringFactor);<br />&nbsp; &nbsp; accelerometerValues[2] = acceleration.z * kFilteringFactor + accelerometerValues[2] * (1.0 - kFilteringFactor);<br />}<br />


D'avance meric, je m'arrache les cheveux là  !!!

Herve
Connectez-vous ou Inscrivez-vous pour répondre.