2010-01-17 25 views
0

J'ai une application qui fait une chose si vous la secouez d'une façon, et une autre si vous la secouez.Accéléromètre détectant les mouvements latéraux - détection instantanée du changement de direction

mon code est.

if (acceleration.x > 1.5) { 

// bras à droite lorsque vous face

float duration = ([imageArray count]*0.04); 

    //HUMAN EYE KEEPS IMAGES IN EYE For 40 MILLISECONDS// 
    //NSLog(@"duration:%f", duration); 
    [theFlash setAnimationImages:imageArray]; 
    [theFlash setAnimationRepeatCount:1]; 
    theFlash.animationDuration = duration; 
    [theFlash startAnimating]; 
    NSLog(@"images flashed forward"); 

} 

if (acceleration.x < -1) 
{ 
    //arm to the left when facing you 

    float duration = ([imageArrayReversed count]*0.04); 

    //HUMAN EYE KEEPS IMAGES IN EYE For 40 MILLISECONDS// 
    NSLog(@"duration:%f", duration); 
    [theFlash setAnimationImages:imageArrayReversed]; 
    [theFlash setAnimationRepeatCount:1]; 
    theFlash.animationDuration = duration; 
    [theFlash startAnimating]; 
    NSLog(@"images flashed backward"); 

} 

les 1 et -1 valeurs y travaillent ne pas être trop sensible.

Cependant, ce code ne me donne pas les résultats désirés. Id aime les images à clignoter (voir le code) dès que la personne commence à déplacer l'appareil dans l'autre sens.

Un moyen de le faire?

+1

Clarification ... vous voulez que l'image clignote lorsque la vitesse de l'appareil atteint zéro quand il tourne, plutôt que quand il commence à décélérer? –

+0

bien, oui. Au tour. Donc, momentanément, l'appareil sera un v = 0. Cela pourrait être un déclencheur efficace, comment puis-je utiliser cela? –

Répondre

0

Eh bien, vous allez devoir intégrer l'accélération pour obtenir la vélocité. Malheureusement, l'accéléromètre est un peu bruyant et dérive inévitablement un peu, donc vous allez devoir filtrer cette intégrale. Je pense le filtre décrit à http://www.musicdsp.org/showone.php?id=92 fera ce que vous avez besoin, avec la fréquence de coupure fixée à environ 1/4 de la fréquence d'échantillonnage. Vous avez besoin de la sortie band, et vous devrez régler le paramètre de résonance.

+0

cela s'avère être beaucoup plus délicat que je pensais. Etes-vous sûr que vous ne pouvez pas dire au téléphone de changer de direction en utilisant l'accéléromètre si l'accélération passe d'une valeur positive à une valeur négative? –

+0

si je l'ai écrit une instruction if comme si (l'accélération est positive et a été 0 avant) {// l'action } et si (l'accélération est négative et a été 0 avant) { // action pour reverse } et je sais que lorsque votre accélération est nulle, cela signifie que vous pouvez toujours être en mouvement, mais dans ce cas, cela ne devrait pas avoir d'importance, quoi qu'il en soit, car déplacer votre appareil à une vitesse constante serait impossible (ou à peu près) –

+0

Tout à fait sûr, mais un filtre simple (que l'on ne fera que 8 à 10 lignes de code) devrait le trier immédiatement. La chose est, si vous voulez chronométrer votre action à la fin de la motion, cela ne va pas être à un point zéro de l'accélération. –