It worked!
普通に歩いたときの歩数はうまく取得できているようです。今のところ閾値の上限を1200mG, 下限を981mGに設定しています。
簡単ですが以下にソースコードを貼り付けて説明をつけておきます。
特徴としては、xyzすべてについて処理してあるので、どの方向であってもちゃんとカウントされるという点です。
[CPP]
/*
* Measuring the number of steps .
* @file Counter.cpp
* @author emboss
* @date 2010/09/12
* @version 1.0
/
include “StdAfx.h”
include “Counter.h”
/
* コンストラクタ.
* 変数初期化を行う.
*/
Counter::Counter(void)
{
mSteps = 0;
mMinThreshold = 981;
mMaxThreshold = 1200;
mStepFlag = FALSE;
}
/
* デストラクタ.
/
Counter::~Counter(void)
{
}
/**
* 歩数を0歩に戻す.
/
void Counter::ResetSteps(void){
mSteps = 0;
}
/
* 歩数を返す.
*/
UINT Counter::GetSteps(void){
return mSteps;
}
/
* SetAcc:重力加速度を受け取る.
* 歩数のカウントを行う.
* @param INT 重力加速度(mG)
/
void Counter::SetAcc( INT acc){
// もし、歩数カウント用のフラッグmStepFlagがTRUEの場合、閾値(上限)を超えている状態
// そのため、閾値(下限)を超えたら1歩とカウントして、歩数カウント用フラグをFALSEに戻す。
// mStepFlagがFALSEの場合は、閾値(上限)をこえたら
// 歩数カウント用のフラッグmStepFlagをTRUEにしておく。
if ( mStepFlag == TRUE ){
if ( acc < mMinThreshold ){
mSteps++;
mStepFlag = FALSE;
}
} else {
if ( acc > mMaxThreshold ){
mStepFlag = TRUE;
}
}
}
[/CPP]
[CPP]
/**
* Measuring the number of steps .
* @file Counter.h
* @author emboss
* @date 2010/09/12
* @version 1.0
/
pragma once
class Counter
{
public:
Counter(void);
~Counter(void);
void ResetSteps(void); // カウンターを0に設定
UINT GetSteps(void); // 現在の歩数をカウント
void SetAcc(INT); // 重力加速度を渡す。
private:
UINT mSteps ; // 歩数カウンタ
INT mMinThreshold; // 閾値(下限)
INT mMaxThreshold; // 閾値(上限)
BOOLEAN mStepFlag; // ステップフラッグ、閾値(上限)を超えたらフラグを立てる
};
[/CPP]
歩いたときだけではなく、走ったときにもうまくカウントが出来ているようです。