#ifndef STEPSENSOR_H #define STEPSENSOR_H #include "../misc/fixc11.h" #include "AccelerometerSensor.h" #include "Sensor.h" struct StepData { ; }; class StepSensor : public Sensor, public SensorListener { 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