Акселерометр обнаруживает движения из стороны в сторону — мгновенное обнаружение изменения направления

StackOverflow https://stackoverflow.com/questions/2079732

Вопрос

У меня есть приложение, которое делает одно, если встряхнуть его в одну сторону, и другое, если встряхнуть в другую.

atm мой код.

if (acceleration.x > 1.5) {

//рука вправо, когда смотришь на себя

    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");  

}

значения 1 и -1 работают над тем, чтобы он не был слишком чувствительным.

однако этот код не дает мне желаемых результатов.Мне нравится, чтобы изображения мигали (см. код), как только человек начинает перемещать устройство в другую сторону.

Есть ли способ сделать это?

Это было полезно?

Решение

Что ж, вам придется интегрировать ускорение, чтобы получить скорость.К сожалению, акселерометр немного шумный и неизбежно немного смещается, поэтому вам придется фильтровать этот интеграл.я думать фильтр, описанный в http://www.musicdsp.org/showone.php?id=92 сделает то, что вам нужно, с частотой среза, установленной примерно на 1/4 частоты дискретизации.Вам нужно band выход, и вам придется настроить параметр резонанса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top