10#ifndef M5_UNIT_DISTANCE_UNIT_RCWL9620_HPP
11#define M5_UNIT_DISTANCE_UNIT_RCWL9620_HPP
13#include <M5UnitComponent.hpp>
14#include <m5_utility/container/circular_buffer.hpp>
33 std::array<uint8_t, 3> raw{};
35 static constexpr float MAX_DISTANCE{4500.f};
36 static constexpr float MIN_DISTANCE{20.f};
41 float fd = raw_distance() / 1000.f;
42 return std::fmax(std::fmin(fd, MAX_DISTANCE), MIN_DISTANCE);
44 inline uint32_t raw_distance()
const
46 return ((uint32_t)raw[0] << 16) | ((uint32_t)raw[1] << 8) | (uint32_t)raw[2];
56class UnitRCWL9620 :
public Component,
public PeriodicMeasurementAdapter<UnitRCWL9620, rcwl9620::Data> {
57 M5_UNIT_COMPONENT_HPP_BUILDER(UnitRCWL9620, 0x57);
71 explicit UnitRCWL9620(
const uint8_t addr = DEFAULT_ADDRESS)
72 : Component(addr), _data{new
m5::container::CircularBuffer<
rcwl9620::Data>(1)}
74 auto ccfg = component_config();
75 ccfg.clock = 100 * 1000U;
76 component_config(ccfg);
78 virtual ~UnitRCWL9620()
82 virtual bool begin()
override;
83 virtual void update(
const bool force =
false)
override;
104 return !empty() ? oldest().distance() : std::numeric_limits<float>::quiet_NaN();
117 return PeriodicMeasurementAdapter<UnitRCWL9620, rcwl9620::Data>::startPeriodicMeasurement(interval);
125 return PeriodicMeasurementAdapter<UnitRCWL9620, rcwl9620::Data>::stopPeriodicMeasurement();
151 virtual bool request_measurement() = 0;
159 bool request_measurement();
162 bool start_periodic_measurement(
const uint32_t interval);
163 bool stop_periodic_measurement();
167 return _interface.get();
172 std::unique_ptr<m5::container::CircularBuffer<rcwl9620::Data>> _data{};
174 inline virtual uint32_t minimum_interval()
const
187 std::unique_ptr<Interface> _interface{};
194constexpr uint8_t MEASURE_DISTANCE{0x01};
@cond0
Definition unit_RCWL9620.hpp:142
An ultrasonic distance measuring sensor unit.
config_t config()
Gets the configration.
Definition unit_RCWL9620.hpp:88
bool measureSingleshot(rcwl9620::Data &d)
Measurement single shot.
Definition unit_RCWL9620.cpp:163
bool startPeriodicMeasurement(const uint32_t interval)
Start periodic measurement.
Definition unit_RCWL9620.hpp:115
float distance() const
Oldest distance (mm)
Definition unit_RCWL9620.hpp:102
bool stopPeriodicMeasurement()
Stop periodic measurement.
Definition unit_RCWL9620.hpp:123
void config(const config_t &cfg)
Set the configration.
Definition unit_RCWL9620.hpp:93
Top level namespace of M5stack.
Settings for begin.
Definition unit_RCWL9620.hpp:64
uint32_t interval_ms
Interval time if start on begin (ms) (100-)
Definition unit_RCWL9620.hpp:68
bool start_periodic
Start periodic measurement on begin?
Definition unit_RCWL9620.hpp:66
Measurement data group.
Definition unit_RCWL9620.hpp:32
float distance() const
Get distance(mm)
Definition unit_RCWL9620.hpp:39