a

Dependencies:   mbed mbed-rtos

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers encoderFilter.cpp Source File

encoderFilter.cpp

00001 /**
00002   ******************************************************************************
00003   * @file    EncoderFilter.cpp
00004   * @author  RBRO/PJ-IU
00005   * @version V1.0.0
00006   * @date    day-month-year
00007   * @brief   This file contains the class implementation for the encoder filter
00008   *          functionality.
00009   ******************************************************************************
00010  */
00011 
00012 #include <Encoders/encoderFilter.hpp>
00013 
00014 /** \brief  Constructor for the CEncoderFilter class
00015  *
00016  *  Constructor method
00017  *
00018  *  \param[in] f_period       period value 
00019  *  \param[in] f_period_sec   period value in seconds   
00020  *  \param[in] f_cpr          counts per revolution (rise and fall edges)
00021  *  \param[in] f_pinName      digital pin connected to encoder output
00022  *  \param[in] f_filter       reference to filter object
00023  */
00024 CEncoderFilter::CEncoderFilter(uint32_t                       f_period
00025                               ,float                          f_period_sec
00026                               ,uint32_t                       f_cpr
00027                               ,PinName                        f_pinName
00028                               ,CFilterFunction<float>&        f_filter)
00029     :CEncoder(f_period,f_period_sec,f_cpr,f_pinName)
00030     ,m_filter(f_filter)
00031 {
00032 }
00033 
00034 /** \brief  Get filtered rps value
00035  *
00036  *  Method for getting filtererd rotations per second value
00037  *
00038  *  \return filtered rps value
00039  */
00040 float CEncoderFilter::getSpeedRps(){
00041     return m_filteredRps;
00042 }
00043 
00044 /**
00045  * @brief Getter filtered count value
00046  * 
00047  * @return int16_t 
00048  */
00049 int16_t  CEncoderFilter::getCount(){
00050      return m_filteredRps*m_period_sec*m_cpr;
00051 }
00052 
00053 /** \brief  Run method
00054  *
00055  *  Method executed at predefined time intervals. 
00056  *  Method called each f_period
00057  * 
00058  */
00059 void CEncoderFilter::_run()
00060 {
00061     float l_count=m_counter.getCount();
00062     m_counter.reset();
00063     m_rps=static_cast<float>(l_count)/m_period_sec/m_cpr;
00064     m_filteredRps=m_filter(m_rps);
00065 }
00066