67 lines
1005 B
C++
67 lines
1005 B
C++
#ifndef STEPSENSOR_H
|
|
#define STEPSENSOR_H
|
|
|
|
|
|
#include "../misc/fixc11.h"
|
|
#include "AccelerometerSensor.h"
|
|
#include "Sensor.h"
|
|
|
|
struct StepData {
|
|
;
|
|
};
|
|
|
|
class StepSensor : public Sensor<StepData>, public SensorListener<AccelerometerData> {
|
|
|
|
private:
|
|
|
|
AccelerometerSensor& acc;
|
|
|
|
public:
|
|
|
|
/** hidden ctor. use singleton */
|
|
StepSensor(AccelerometerSensor& acc) : acc(acc) {
|
|
;
|
|
}
|
|
|
|
void start() override {
|
|
acc.addListener(this);
|
|
acc.start();
|
|
}
|
|
|
|
void stop() override {
|
|
throw "todo";
|
|
}
|
|
|
|
virtual void onSensorData(const AccelerometerData& data) override {
|
|
parse(data);
|
|
}
|
|
|
|
|
|
protected:
|
|
|
|
const float threshold = 11.0;
|
|
const int blockTime = 25;
|
|
int block = 0;
|
|
|
|
void parse(const AccelerometerData& data) {
|
|
|
|
const float x = data.x;
|
|
const float y = data.y;
|
|
const float z = data.z;
|
|
|
|
const float mag = std::sqrt( (x*x) + (y*y) + (z*z) );
|
|
|
|
if (block > 0) {
|
|
--block;
|
|
} else if (mag > threshold) {
|
|
informListeners(StepData());
|
|
block = blockTime;
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
#endif // STEPSENSOR_H
|