我必须开发与此Pedometer App
相同的功能我已经非常详细地观察了这个Pedometer app。
它不是一个完美的计步器应用程序。例如,如果您停留/坐在一个地方并握手,它还会检测步数和距离。
忽略这种理想和重力行为,因为在这个应用程序的说明中已经提到过你应该绑你的iPhone,或者你应该把它放在口袋里计算步数。 这样,我发现这个应用程序运行良好,几乎可以检测到所有步骤。
我的问题是:我根据上述逻辑开发了一个样本,但它没有达到那个水平。例如,有时它会同时检测2-3个步骤。有时它工作正常。
我的代码:
在viewDidLoad中:
[[UIAccelerometer sharedAccelerometer] setUpdateInterval:0.2]
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
const float violence = 1.2;
static BOOL beenhere;
BOOL shake = FALSE;
if (beenhere) return;
beenhere = TRUE;
if (acceleration.x > violence || acceleration.x < (-1* violence))
shake = TRUE;
if (acceleration.y > violence || acceleration.y < (-1* violence))
shake = TRUE;
if (acceleration.z > violence || acceleration.z < (-1* violence))
shake = TRUE;
if (shake) {
steps=steps+1;
}
beenhere = false;
}
我做错了什么?我无法确定阈值。如果我把它做得很高,它就不会检测到小步骤。如果我把它缩小,它会同时记录3-4个步骤。
是否需要执行其他任何实现,或者在此代码中进行一些调整?
我已经看过所有其他类似的Stack Overflow链接。我发现的任何东西都达不到这个水平。
请帮忙。
答案 0 :(得分:20)
一直在计算打鼾,而不是步骤,但有一些相同的问题。没有实际答案,但有些建议:
violence
)使用可变阈值,基于先前事件的moving average。测试这种野兽“活”是不可能的。 (我可以想象你试着在你面前拿着笔记本电脑慢跑,试图让调试器控制台集中注意力。)你应该做的是首先装备你的应用程序来制作包含原始内容的一些录音(即写入文件)测量,然后重新装配您的应用程序(#ifdefs在这里很方便),以便能够“回放”这些测量,以便您可以使用调试器逐步浏览应用程序并观察其行为。
答案 1 :(得分:0)
var motionManager = CMMotionManager()
motionManager.deviceMotionUpdateInterval = 0.1
motionManager.startDeviceMotionUpdatesToQueue(NSOperationQueue.currentQueue(), withHandler:{
deviceManager, error in
var accelerationThreshold:Double = 1;
var userAcceleration:CMAcceleration = deviceManager.userAcceleration;
if(fabs(userAcceleration.x) > accelerationThreshold) || (fabs(userAcceleration.y) > accelerationThreshold) || (fabs(userAcceleration.z) > accelerationThreshold)
{
println("LowPassFilterSignal")
}
})