Skip to content

Commit

Permalink
finish impl of AS7265X device
Browse files Browse the repository at this point in the history
  • Loading branch information
gigapod committed Nov 12, 2023
1 parent a3f3aaa commit 8427984
Show file tree
Hide file tree
Showing 2 changed files with 159 additions and 6 deletions.
98 changes: 94 additions & 4 deletions src/Flux/flxDevAS7265x.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,10 @@ flxRegisterDevice(flxDevAS7265X);
//----------------------------------------------------------------------------------------------------------
/// @brief Constructor
///
flxDevAS7265X::flxDevAS7265X() : _indicator{true}, _gain{AS7265X_GAIN_16X}
flxDevAS7265X::flxDevAS7265X()
: _indicator{true}, _gain{AS7265X_GAIN_16X}, _mmode{AS7265X_MEASUREMENT_MODE_6CHAN_ONE_SHOT},
_icycles{kAS7265xDefaultIntCycles}, _ind_current{AS7265X_INDICATOR_CURRENT_LIMIT_8MA},
_white_current{AS7265X_LED_CURRENT_LIMIT_12_5MA}, _ir_current{AS7265X_LED_CURRENT_LIMIT_12_5MA}
{

setName(getDeviceName(), "AS7265X Triad Spectroscopy Sensor");
Expand All @@ -40,6 +43,12 @@ flxDevAS7265X::flxDevAS7265X() : _indicator{true}, _gain{AS7265X_GAIN_16X}
flxRegister(readWithLED, "Enable LED", "Measure with LED enabled");
flxRegister(enableIndicator, "Enable Indicator", "Indicator LED enabled");
flxRegister(sensorGain, "Gain", "Gain settings for sensor");
flxRegister(measureMode, "Measurement Mode", "Mode use when taking measurements");
flxRegister(intCycles, "Integration Cycles", "The number of cycles per reading (n * 2.8ms)");
flxRegister(whiteCurrent, "White LED Current", "White LED current - milli amps");
flxRegister(irCurrent, "IR LED Current", "IR LED current - milli amps");
flxRegister(indicatorCurrent, "Indicator Current", "Indicator current - milli amps");

flxRegister(outputCal, "Calibrated Output", "Return calibrated values");

// Register output params
Expand Down Expand Up @@ -95,15 +104,21 @@ bool flxDevAS7265X::onInitialize(TwoWire &wirePort)
{
bool status = AS7265X::begin(wirePort);

// if initialization was successful - true - set parameters
if (status)
{
AS7265X::setGain(_gain);
AS7265X::setMeasurementMode(_mmode);
AS7265X::setIntegrationCycles(_icycles);
AS7265X::setIndicatorCurrent(_ind_current);
AS7265X::setBulbCurrent(_white_current, AS7265x_LED_WHITE);
AS7265X::setBulbCurrent(_ir_current, AS7265x_LED_IR);
}
return status;
}

//---------------------------------------------------------------------------
// Indicator property
// Indicator property - getter/setter
//---------------------------------------------------------------------------
bool flxDevAS7265X::get_indicator(void)
{
Expand All @@ -124,7 +139,7 @@ void flxDevAS7265X::set_indicator(bool isOn)
}

//---------------------------------------------------------------------------
// Gain property
// Gain property - getter/setter
//---------------------------------------------------------------------------

uint8_t flxDevAS7265X::get_gain(void)
Expand All @@ -138,9 +153,84 @@ void flxDevAS7265X::set_gain(uint8_t value)
if (isInitialized())
AS7265X::setGain(value);
}

//---------------------------------------------------------------------------
// Measurement Mode property - getter/setter
//---------------------------------------------------------------------------
uint8_t flxDevAS7265X::get_mmode(void)
{
return _mmode;
}

void flxDevAS7265X::set_mmode(uint8_t value)
{
_mmode = value;
if (isInitialized())
AS7265X::setMeasurementMode(value);
}

//---------------------------------------------------------------------------
// Integration Cycles property - getter/setter
//---------------------------------------------------------------------------
uint8_t flxDevAS7265X::get_icycles(void)
{
return _icycles;
}

void flxDevAS7265X::set_icycles(uint8_t value)
{
_icycles = value;
if (isInitialized())
AS7265X::setIntegrationCycles(value);
}

//---------------------------------------------------------------------------
// Indicator Current property - getter/setter
//---------------------------------------------------------------------------
uint8_t flxDevAS7265X::get_ind_current(void)
{
return _ind_current;
}

void flxDevAS7265X::set_ind_current(uint8_t value)
{
_ind_current = value;
if (isInitialized())
AS7265X::setIndicatorCurrent(value);
}

//---------------------------------------------------------------------------
// White LED Current property - getter/setter
//---------------------------------------------------------------------------
uint8_t flxDevAS7265X::get_white_current(void)
{
return _white_current;
}

void flxDevAS7265X::set_white_current(uint8_t value)
{
_white_current = value;
if (isInitialized())
AS7265X::setBulbCurrent(value, AS7265x_LED_WHITE);
}

//---------------------------------------------------------------------------
// IR LED Current property - getter/setter
//---------------------------------------------------------------------------
uint8_t flxDevAS7265X::get_ir_current(void)
{
return _ir_current;
}

void flxDevAS7265X::set_ir_current(uint8_t value)
{
_ir_current = value;
if (isInitialized())
AS7265X::setBulbCurrent(value, AS7265x_LED_IR);
}
//---------------------------------------------------------------------------
///
/// @brief Called right before data parameters are read - take measurments called
/// @brief Called right before data parameters are read - take measurements called
///

bool flxDevAS7265X::execute(void)
Expand Down
67 changes: 65 additions & 2 deletions src/Flux/flxDevAS7265x.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@

#define kAS7265xDeviceName "AS7265X"

#define kAS7265xDefaultIntCycles 49

// Define our class
class flxDevAS7265X : public flxDeviceI2CType<flxDevAS7265X>, public AS7265X
{
Expand Down Expand Up @@ -53,16 +55,41 @@ class flxDevAS7265X : public flxDeviceI2CType<flxDevAS7265X>, public AS7265X
private:
// property methods

// Indicator pro getter/setter/stash
bool get_indicator(void);
void set_indicator(bool);

bool _indicator;

// gain pro getter/setter/stash
uint8_t get_gain(void);
void set_gain(uint8_t);

uint8_t _gain;

// Measurement Mode pro getter/setter/stash
uint8_t get_mmode(void);
void set_mmode(uint8_t);
uint8_t _mmode;

// Integration Cycles pro getter/setter/stash
uint8_t get_icycles(void);
void set_icycles(uint8_t);
uint8_t _icycles;

// Indicator current pro getter/setter/stash
uint8_t get_ind_current(void);
void set_ind_current(uint8_t);
uint8_t _ind_current;

// White LED current pro getter/setter/stash
uint8_t get_white_current(void);
void set_white_current(uint8_t);
uint8_t _white_current;

// IR LED current pro getter/setter/stash
uint8_t get_ir_current(void);
void set_ir_current(uint8_t);
uint8_t _ir_current;

// Parameter methods
bool read_output_type(void);
float read_A(void);
Expand Down Expand Up @@ -98,10 +125,46 @@ class flxDevAS7265X : public flxDeviceI2CType<flxDevAS7265X>, public AS7265X

flxPropertyBool<flxDevAS7265X> outputCal = {true};

// Gain prop
flxPropertyRWUint8<flxDevAS7265X, &flxDevAS7265X::get_gain, &flxDevAS7265X::set_gain> sensorGain = {
AS7265X_GAIN_16X,
{{"1X", AS7265X_GAIN_1X}, {"3.7X", AS7265X_GAIN_37X}, {"16X", AS7265X_GAIN_16X}, {"64X", AS7265X_GAIN_64X}}};

// Measurement mode prop
flxPropertyRWUint8<flxDevAS7265X, &flxDevAS7265X::get_mmode, &flxDevAS7265X::set_mmode> measureMode = {
AS7265X_MEASUREMENT_MODE_6CHAN_ONE_SHOT,
{{"STUV Channels", AS7265X_MEASUREMENT_MODE_4CHAN},
{"RTUW Channels", AS7265X_MEASUREMENT_MODE_4CHAN_2},
{"6 Channel Continuous", AS7265X_MEASUREMENT_MODE_6CHAN_CONTINUOUS},
{"6 Channel 1 Shot", AS7265X_MEASUREMENT_MODE_6CHAN_ONE_SHOT}}};

// Integration Cycles
flxPropertyRWUint8<flxDevAS7265X, &flxDevAS7265X::get_icycles, &flxDevAS7265X::set_icycles> intCycles = {
kAS7265xDefaultIntCycles, 0, 255};

// Indicator Current prop
flxPropertyRWUint8<flxDevAS7265X, &flxDevAS7265X::get_ind_current, &flxDevAS7265X::set_ind_current>
indicatorCurrent = {AS7265X_INDICATOR_CURRENT_LIMIT_8MA,
{{"1 ma", AS7265X_INDICATOR_CURRENT_LIMIT_1MA},
{"2 ma", AS7265X_INDICATOR_CURRENT_LIMIT_2MA},
{"4 ma", AS7265X_INDICATOR_CURRENT_LIMIT_4MA},
{"8 ma", AS7265X_INDICATOR_CURRENT_LIMIT_8MA}}};

// White LED Current prop
flxPropertyRWUint8<flxDevAS7265X, &flxDevAS7265X::get_white_current, &flxDevAS7265X::set_white_current>
whiteCurrent = {AS7265X_LED_CURRENT_LIMIT_12_5MA,
{{"12.5 ma", AS7265X_LED_CURRENT_LIMIT_12_5MA},
{"25 ma", AS7265X_LED_CURRENT_LIMIT_25MA},
{"50 ma", AS7265X_LED_CURRENT_LIMIT_50MA},
{"100 ma", AS7265X_LED_CURRENT_LIMIT_100MA}}};

// IR LED Current prop
flxPropertyRWUint8<flxDevAS7265X, &flxDevAS7265X::get_ir_current, &flxDevAS7265X::set_ir_current> irCurrent = {
AS7265X_LED_CURRENT_LIMIT_12_5MA,
{{"12.5 ma", AS7265X_LED_CURRENT_LIMIT_12_5MA},
{"25 ma", AS7265X_LED_CURRENT_LIMIT_25MA},
{"50 ma", AS7265X_LED_CURRENT_LIMIT_50MA}}};

// Outputs
// define parameters for calibrarted outputs
flxParameterOutBool<flxDevAS7265X, &flxDevAS7265X::read_output_type> outputType;
Expand Down

0 comments on commit 8427984

Please sign in to comment.