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{};
49 return (
static_cast<uint32_t
>(
raw[0]) << 16) | (
static_cast<uint32_t
>(
raw[1]) << 8) |
50 static_cast<uint32_t
>(
raw[2]);
62class UnitRCWL9620 :
public Component,
public PeriodicMeasurementAdapter<UnitRCWL9620, rcwl9620::Data> {
80 : Component(addr), _data{new
m5::container::CircularBuffer<
rcwl9620::Data>(1)}
82 auto ccfg = component_config();
83 ccfg.clock = 100 * 1000U;
84 component_config(ccfg);
92 virtual bool begin()
override;
95 virtual void update(
const bool force =
false)
override;
119 return !empty() ? oldest().distance() : std::numeric_limits<float>::quiet_NaN();
132 return PeriodicMeasurementAdapter<UnitRCWL9620, rcwl9620::Data>::startPeriodicMeasurement(interval);
140 return PeriodicMeasurementAdapter<UnitRCWL9620, rcwl9620::Data>::stopPeriodicMeasurement();
167 virtual bool request_measurement() = 0;
175 bool request_measurement();
178 bool start_periodic_measurement(
const uint32_t interval);
179 bool stop_periodic_measurement();
183 return _interface.get();
188 std::unique_ptr<m5::container::CircularBuffer<rcwl9620::Data>> _data{};
190 inline virtual uint32_t minimum_interval()
const
203 std::unique_ptr<Interface> _interface{};
210constexpr uint8_t MEASURE_DISTANCE{0x01};
@cond0
Definition unit_RCWL9620.hpp:158
An ultrasonic distance measuring sensor unit.
config_t config()
Gets the configuration.
Definition unit_RCWL9620.hpp:101
virtual bool begin() override
Begin communication and optionally start periodic measurement.
Definition unit_RCWL9620.cpp:106
bool startPeriodicMeasurement(const uint32_t interval)
Start periodic measurement.
Definition unit_RCWL9620.hpp:130
UnitRCWL9620(const uint8_t addr=DEFAULT_ADDRESS)
Constructor.
Definition unit_RCWL9620.hpp:79
bool measureSingleshot(rcwl9620::Data &data)
Measurement single shot.
Definition unit_RCWL9620.cpp:176
float distance() const
Oldest distance (mm)
Definition unit_RCWL9620.hpp:117
virtual void update(const bool force=false) override
Update periodic measurement.
Definition unit_RCWL9620.cpp:153
bool stopPeriodicMeasurement()
Stop periodic measurement.
Definition unit_RCWL9620.hpp:138
void config(const config_t &cfg)
Set the configuration.
Definition unit_RCWL9620.hpp:107
Top level namespace of M5Stack.
Settings for begin.
Definition unit_RCWL9620.hpp:70
uint32_t interval_ms
Interval time if start on begin (ms) (I2C:150-, GPIO:50-)
Definition unit_RCWL9620.hpp:74
bool start_periodic
Start periodic measurement on begin?
Definition unit_RCWL9620.hpp:72
Measurement data group.
Definition unit_RCWL9620.hpp:32
uint32_t raw_distance() const
Get raw distance (um)
Definition unit_RCWL9620.hpp:47
static constexpr float MAX_DISTANCE
Maximum distance (mm)
Definition unit_RCWL9620.hpp:35
std::array< uint8_t, 3 > raw
Raw data (3 bytes, MSB first)
Definition unit_RCWL9620.hpp:33
float distance() const
Get distance (mm)
Definition unit_RCWL9620.hpp:40
static constexpr float MIN_DISTANCE
Minimum distance (mm)
Definition unit_RCWL9620.hpp:36