Acelerômetro Detectando movimentos laterais - Detecção instantânea de mudança de direção
-
21-09-2019 - |
Pergunta
Eu tenho um aplicativo que faz uma coisa se você o agitar de uma maneira e de outra se você o agitar a outra.
ATM, meu código é.
if (acceleration.x > 1.5) {
// braço para a direita quando se deparar com você
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");
}
Os valores 1 e -1 estão trabalhando em não ser muito sensível.
No entanto, esse código não está me dando os resultados desejados. Id Gosto das imagens para piscar (consulte o código) assim que a pessoa começar a mover o dispositivo para o outro lado.
Alguma maneira de fazer isso?
Solução
Bem, você terá que integrar a aceleração para obter velocidade. Infelizmente, o acelerômetro é um pouco barulhento e inevitavelmente se desviará um pouco, então você terá que filtrar essa integral. EU acho o filtro descrito em http://www.musicdsp.org/showone.php?id=92 fará o que você precisa, com a frequência de corte definida para cerca de 1/4 da frequência de amostragem. Você precisa do band
saída e você terá que ajustar o parâmetro de ressonância.