![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
a
include/SHARP_IR_distance/DistanceSensors/distancesensors.inl@1:ceee5a608e7c, 2019-03-28 (annotated)
- Committer:
- alexpirciu
- Date:
- Thu Mar 28 07:44:42 2019 +0000
- Revision:
- 1:ceee5a608e7c
assa
Who changed what in which revision?
User | Revision | Line number | New 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 | } |