a

Dependencies:   mbed mbed-rtos

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers sensortask.cpp Source File

sensortask.cpp

00001 /**
00002   ******************************************************************************
00003   * @file    SensorTask.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 sensor task
00008   *          functionality.
00009   ******************************************************************************
00010  */
00011 #include <Examples/Sensors/sensortask.hpp>
00012 
00013 namespace examples
00014 {
00015 
00016     namespace sensors{
00017         
00018 
00019         /** \brief  Constructor for the CCounter class
00020          *
00021          *  Constructor method
00022          *
00023          *  @param f_period       period value
00024          *  @param f_serial       reference to the serial object
00025          */
00026         CDISTFTest::CDISTFTest(uint32_t        f_period
00027                                         ,Serial&         f_serial)
00028             :task::CTask(f_period)
00029             ,m_serial(f_serial)
00030             ,m_tf()
00031         {
00032             std::array<std::array<float,1>,3> l_num({std::array<float,1>({3}),std::array<float,1>({-5.897}),std::array<float,1>({2.9})});
00033             std::array<std::array<float,1>,3> l_den({std::array<float,1>({1}),std::array<float,1>({-1.949}),std::array<float,1>({0.9512})});
00034             m_tf.setNum(l_num);
00035             m_tf.setDen(l_den);
00036         }
00037 
00038         /** \brief  Method called each f_period
00039          * 
00040          *  
00041          *  
00042          */
00043         void CDISTFTest::_run()
00044         {
00045             float l_input=1.0;
00046             float l_output=m_tf(l_input);
00047             m_serial.printf("%.4f\n",l_output);
00048         }
00049 
00050         /** \brief  Constructor for the CCounter class
00051          *
00052          *  Constructor method
00053          *
00054          *  @param f_period       period value
00055          *  @param f_encoder      reference to encoder object
00056          *  @param f_serial       reference to the serial object
00057          */
00058         CEncoderSender::CEncoderSender(uint32_t            f_period
00059                                                 ,encoders::IEncoderGetter&     f_encoder
00060                                                 ,Serial&             f_serial)
00061             :task::CTask(f_period)
00062             ,m_isActived(false)
00063             ,m_encoder(f_encoder)
00064             ,m_serial(f_serial)
00065         {
00066         }
00067 
00068         /** \brief  Serial callback method
00069          *
00070          * Serial callback attaching serial callback to controller object
00071          *
00072          * @param  obj                 PID controller object
00073          * @param  a                   string to read data from
00074          * @param b                   string to write data to
00075          * 
00076          */
00077         void CEncoderSender::staticSerialCallback(void* obj,char const * a, char * b){
00078             examples::sensors::CEncoderSender* self = static_cast<CEncoderSender*>(obj);
00079             self->serialCallback(a,b);
00080         }
00081 
00082         /** \brief  Serial callback actions
00083          *
00084          * Serial callback method setting controller to values received
00085          *
00086          * @param  a                   string to read data from
00087          * @param b                   string to write data to
00088          * 
00089          */
00090         void CEncoderSender::serialCallback(char const * a, char * b){
00091             int l_isActivate=0;
00092             uint32_t l_res = sscanf(a,"%d",&l_isActivate);
00093             if(l_res==1){
00094                 m_isActived=(l_isActivate>=1);
00095                 sprintf(b,"ack;;");
00096             }else{
00097                 sprintf(b,"sintax error;;");
00098             }
00099         }
00100 
00101         /** \brief  Method called each f_period
00102          * 
00103          *  
00104          *  
00105          */
00106         void CEncoderSender::_run()
00107         {
00108             if(!m_isActived) return;
00109             float l_filtRps=m_encoder.getSpeedRps();
00110             m_serial.printf("@ENPB:%.2f;;\r\n",l_filtRps);  
00111         }                        
00112 
00113     }; // namespace sensors
00114 }; // namespace examples
00115