35 lines
1.0 KiB
C++
35 lines
1.0 KiB
C++
#pragma once
|
|
// using external voltage reference
|
|
|
|
#include "esphome/core/component.h"
|
|
#include "esphome/components/spi/spi.h"
|
|
#include "esphome/components/sensor/sensor.h"
|
|
|
|
namespace esphome {
|
|
namespace ads131m08 {
|
|
|
|
class ADS131M08Sensor : public sensor::Sensor, public Component
|
|
{
|
|
};
|
|
|
|
class ADS131M08Hub : public Component, public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW, spi::CLOCK_PHASE_TRAILING, spi::DATA_RATE_8MHZ>
|
|
{
|
|
public:
|
|
void setup() override;
|
|
void loop() override;
|
|
void set_drdy_pin(InternalGPIOPin *pin) { drdy_pin_ = pin; }
|
|
void register_sensor(int channel, ADS131M08Sensor *s) { sensors_[channel] = s; }
|
|
void set_reference_voltage(float reference_voltage) { this->reference_voltage_ = reference_voltage; }
|
|
void dump_config() override;
|
|
|
|
protected:
|
|
float reference_voltage_;
|
|
InternalGPIOPin *drdy_pin_;
|
|
ADS131M08Sensor *sensors_[8] = {nullptr};
|
|
volatile bool data_ready_{false};
|
|
static void isr(ADS131M08Hub *arg);
|
|
void read_data_();
|
|
};
|
|
|
|
} // namespace ads131m08
|
|
} // namespace esphome
|