Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
HCSR04/SONAR_MANAGER.hpp
- Committer:
- _seminahn
- Date:
- 2021-11-30
- Revision:
- 3:a4677501ae87
- Parent:
- 2:0de4854743f7
File content as of revision 3:a4677501ae87:
#ifndef ZETA_BOT_MODULE_SONAR_MANAGER_HPP_
#define ZETA_BOT_MODULE_SONAR_MANAGER_HPP_
#include "HCSR04.h"
#include "mbed.h"
#define SONAR_FILTER_WS 5
template<size_t NUM_SONAR>
class SONAR_MANAGER
{
public:
SONAR_MANAGER(PinName echo[], PinName trigger_pin) : trigger(trigger_pin)
{
for(int i = 0; i < NUM_SONAR; i++)
{
sonar[i] = new HCSR04(echo[i], trigger_pin, SONAR_FILTER_WS, i);
}
}
~SONAR_MANAGER()
{
delete[] sonar;
delete[] distance;
delete[] ready;
}
void GetDistance(volatile float dest[])
{
for(int i = 0; i < NUM_SONAR; i++)
{
dest[i] = distance[i];
}
}
void PrintReady();
void Begin(float control_freq_)
{
control_freq = control_freq_;
for(int i = 0; i < NUM_SONAR; i++)
{
sonar[i]->setRanges(3, 70);
distance[i] = 0.0;
ready[i] = 0;
}
scheduler.attach(callback(this, &SONAR_MANAGER::Loop), float(1.0 / control_freq));
memset(ready,0,sizeof(NUM_SONAR));
}
private:
DigitalOut trigger;
HCSR04* sonar[NUM_SONAR];
float distance[NUM_SONAR];
int ready[NUM_SONAR];
float control_freq;
Ticker scheduler;
Timeout triggerTimeout;
void Loop()
{
int i;
memset(ready,0,sizeof(ready));
trigger = 1;
triggerTimeout.attach_us(callback(this, &SONAR_MANAGER::turnOffTrigger), 10);
for(i = 0; i < NUM_SONAR; i++)
{
ready[i] = sonar[i]->isNewDataReady();
sonar[i]->startMeasurement();
if(ready[i] != 0)
{
distance[i] = sonar[i]->getDistance_cm();
}
}
}
void turnOffTrigger()
{
trigger = 0;
}
};
#endif