Alex Pirciu
/
BFMC
a
include/Encoders/quadratureencodertask.hpp
- Committer:
- alexpirciu
- Date:
- 2019-03-28
- Revision:
- 1:ceee5a608e7c
File content as of revision 1:ceee5a608e7c:
/** * @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