a

Dependencies:   mbed mbed-rtos

Committer:
alexpirciu
Date:
Thu Mar 28 07:44:42 2019 +0000
Revision:
1:ceee5a608e7c
assa

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alexpirciu 1:ceee5a608e7c 1 /** @brief Class constructor
alexpirciu 1:ceee5a608e7c 2
alexpirciu 1:ceee5a608e7c 3
alexpirciu 1:ceee5a608e7c 4 @param f_period sensor reading period
alexpirciu 1:ceee5a608e7c 5 @param f_baseTick base tick period, in seconds
alexpirciu 1:ceee5a608e7c 6 @param f_sensor_list the list of sensor objects
alexpirciu 1:ceee5a608e7c 7 */
alexpirciu 1:ceee5a608e7c 8 template<class T >
alexpirciu 1:ceee5a608e7c 9 CDistanceSensors<T>::CDistanceSensors(const uint32_t f_period,
alexpirciu 1:ceee5a608e7c 10 const float f_baseTick,
alexpirciu 1:ceee5a608e7c 11 T& f_sensor_list)
alexpirciu 1:ceee5a608e7c 12 : task::CTask(f_period)
alexpirciu 1:ceee5a608e7c 13 , m_sensor_list(f_sensor_list)
alexpirciu 1:ceee5a608e7c 14 , m_index(0)
alexpirciu 1:ceee5a608e7c 15 , m_N(f_sensor_list.size())
alexpirciu 1:ceee5a608e7c 16 , m_disableTimeOut()
alexpirciu 1:ceee5a608e7c 17 , m_enableTimeOut()
alexpirciu 1:ceee5a608e7c 18 , m_message("@IRDS:")
alexpirciu 1:ceee5a608e7c 19 // , m_buf("")
alexpirciu 1:ceee5a608e7c 20 {
alexpirciu 1:ceee5a608e7c 21 //static_assert(f_sensor_list.size() * 0.03 < f_period*f_baseTick,
alexpirciu 1:ceee5a608e7c 22 //"IR sensor reding period is too small! It must be grater than: number of sensors in \"conflict\" *0.3seconds!");
alexpirciu 1:ceee5a608e7c 23 }
alexpirciu 1:ceee5a608e7c 24
alexpirciu 1:ceee5a608e7c 25 //static_assert(m_N * 0.03 < f_period*f_baseTick,
alexpirciu 1:ceee5a608e7c 26 // "IR sensor reding period is too small! It must be grater than: number of sensors in \"conflict\" *0.3seconds!");
alexpirciu 1:ceee5a608e7c 27
alexpirciu 1:ceee5a608e7c 28 /** @brief Class destructor
alexpirciu 1:ceee5a608e7c 29
alexpirciu 1:ceee5a608e7c 30 Destructor method
alexpirciu 1:ceee5a608e7c 31 */
alexpirciu 1:ceee5a608e7c 32 template<class T >
alexpirciu 1:ceee5a608e7c 33 CDistanceSensors<T>::~CDistanceSensors(){}
alexpirciu 1:ceee5a608e7c 34
alexpirciu 1:ceee5a608e7c 35 /** @brief Read callback method
alexpirciu 1:ceee5a608e7c 36
alexpirciu 1:ceee5a608e7c 37 Callback for reading the value of one distance sensor
alexpirciu 1:ceee5a608e7c 38
alexpirciu 1:ceee5a608e7c 39 */
alexpirciu 1:ceee5a608e7c 40 template<class T >
alexpirciu 1:ceee5a608e7c 41 void CDistanceSensors<T>::ReadCallback(){
alexpirciu 1:ceee5a608e7c 42 // // buffer for holding message data
alexpirciu 1:ceee5a608e7c 43 // char buf [10];
alexpirciu 1:ceee5a608e7c 44 // read distance form sensor at position m_index in the sensor list
alexpirciu 1:ceee5a608e7c 45 m_sensor_list[m_index]->ReadDistance();
alexpirciu 1:ceee5a608e7c 46 // disable sensor at position m_index in the sensor list
alexpirciu 1:ceee5a608e7c 47 m_sensor_list[m_index]->disable();
alexpirciu 1:ceee5a608e7c 48 //sprintf(buf,"-%d-%3.2f;",m_index, m_sensor_list[m_index]->getValue());/// cu m_index
alexpirciu 1:ceee5a608e7c 49 // format value so it can be appended to message
alexpirciu 1:ceee5a608e7c 50 // sprintf(buf,"%3.2f;", m_sensor_list[m_index]->getValue()); // standard formatting
alexpirciu 1:ceee5a608e7c 51 // // append value from sensor to message
alexpirciu 1:ceee5a608e7c 52 // m_message.append(buf);
alexpirciu 1:ceee5a608e7c 53 // if the last sensor is read, send message on UART and exit method
alexpirciu 1:ceee5a608e7c 54 if(m_index == m_N-1){
alexpirciu 1:ceee5a608e7c 55 // m_message=m_message+";\r\n";
alexpirciu 1:ceee5a608e7c 56 // m_serial.printf(m_message.c_str());
alexpirciu 1:ceee5a608e7c 57 // m_message="@IRDS:";
alexpirciu 1:ceee5a608e7c 58 return;
alexpirciu 1:ceee5a608e7c 59 }
alexpirciu 1:ceee5a608e7c 60 // go to next sensor
alexpirciu 1:ceee5a608e7c 61 m_index = m_index+1;
alexpirciu 1:ceee5a608e7c 62 // enable next sensor
alexpirciu 1:ceee5a608e7c 63 m_sensor_list[m_index]->enable();
alexpirciu 1:ceee5a608e7c 64 // disable sensor timeout, read next sensor after 0.03 seconds
alexpirciu 1:ceee5a608e7c 65 m_disableTimeOut.attach(callback(this, &CDistanceSensors<T>::ReadCallback), 0.03);
alexpirciu 1:ceee5a608e7c 66 }
alexpirciu 1:ceee5a608e7c 67
alexpirciu 1:ceee5a608e7c 68 /** @brief Method called each f_period
alexpirciu 1:ceee5a608e7c 69 *
alexpirciu 1:ceee5a608e7c 70 */
alexpirciu 1:ceee5a608e7c 71 template<class T >
alexpirciu 1:ceee5a608e7c 72 void CDistanceSensors<T>::_run(){
alexpirciu 1:ceee5a608e7c 73 // start from first sensor
alexpirciu 1:ceee5a608e7c 74 m_index=0;
alexpirciu 1:ceee5a608e7c 75 // enable first sensor
alexpirciu 1:ceee5a608e7c 76 m_sensor_list[m_index]->enable();
alexpirciu 1:ceee5a608e7c 77 // read sensor after 0.03 seconds
alexpirciu 1:ceee5a608e7c 78 m_disableTimeOut.attach(callback(this, &CDistanceSensors<T>::ReadCallback), 0.03);
alexpirciu 1:ceee5a608e7c 79 }