Alex Pirciu
/
BFMC
a
Diff: include/Encoders/quadratureencodertask.hpp
- Revision:
- 1:ceee5a608e7c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/include/Encoders/quadratureencodertask.hpp Thu Mar 28 07:44:42 2019 +0000 @@ -0,0 +1,75 @@ +/** + * @file quadratureencodertask.hpp + * @author RBRO/PJ-IU + * @brief + * @version 0.1 + * @date 2018-10-23 + * + * @copyright Copyright (c) 2018 + * + */ +#ifndef QUADRATURE_ENCODER_TASK_HPP +#define QUADRATURE_ENCODER_TASK_HPP + +#include <Encoders/encoderinterface.hpp> +#include <Encoders/QuadratureEncoder.hpp> +#include <Filter/Filter.hpp> + +#include <rtos.h> + +namespace encoders{ + +/** + * @brief Rotary encoder with filter interface class + * + */ +class CQuadratureEncoderNonFilteredGetterInterface{ + public: + virtual int16_t getNonFilteredCount()=0; + virtual float getNonFilteredSpeedRps() = 0; +}; + +/** + * @brief It implements a periodic task, which get the value from the counter and reset it to zero. + * + */ +class CQuadratureEncoderTask:public IEncoderGetter{ + public: + CQuadratureEncoderTask(float,encoders::CQuadratureEncoder_TIMX*,uint16_t); + static void static_callback(void* obj); + + void startTimer(); + protected: + virtual void _run(); + virtual int16_t getCount(); + virtual float getSpeedRps(); + virtual bool isAbs(){return false;} + protected: + encoders::CQuadratureEncoder_TIMX *m_Quadratureencoder; + int16_t m_encoderCnt; + const float m_taskperiod_s; + const uint16_t m_resolution; + RtosTimer m_timer; +}; + +/** + * @brief It implements the same functionality than CQuadratureEncoderTask class, but in additional it can filter the values. + * + */ +class CQuadratureEncoderWithFilterTask: public CQuadratureEncoderTask, public CQuadratureEncoderNonFilteredGetterInterface{ + public: + CQuadratureEncoderWithFilterTask(float,encoders::CQuadratureEncoder_TIMX *, uint16_t,filter::CFilterFunction<float>&); + virtual void _run(); + virtual int16_t getCount(); + virtual float getSpeedRps(); + virtual int16_t getNonFilteredCount(); + virtual float getNonFilteredSpeedRps(); + protected: + double m_encoderCntFiltered; + filter::CFilterFunction<float>& m_filter; + +}; + +}; // namespace encoders + +#endif