Skip to content

Commit 8427984

Browse files
committed
finish impl of AS7265X device
1 parent a3f3aaa commit 8427984

File tree

2 files changed

+159
-6
lines changed

2 files changed

+159
-6
lines changed

src/Flux/flxDevAS7265x.cpp

Lines changed: 94 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,10 @@ flxRegisterDevice(flxDevAS7265X);
3131
//----------------------------------------------------------------------------------------------------------
3232
/// @brief Constructor
3333
///
34-
flxDevAS7265X::flxDevAS7265X() : _indicator{true}, _gain{AS7265X_GAIN_16X}
34+
flxDevAS7265X::flxDevAS7265X()
35+
: _indicator{true}, _gain{AS7265X_GAIN_16X}, _mmode{AS7265X_MEASUREMENT_MODE_6CHAN_ONE_SHOT},
36+
_icycles{kAS7265xDefaultIntCycles}, _ind_current{AS7265X_INDICATOR_CURRENT_LIMIT_8MA},
37+
_white_current{AS7265X_LED_CURRENT_LIMIT_12_5MA}, _ir_current{AS7265X_LED_CURRENT_LIMIT_12_5MA}
3538
{
3639

3740
setName(getDeviceName(), "AS7265X Triad Spectroscopy Sensor");
@@ -40,6 +43,12 @@ flxDevAS7265X::flxDevAS7265X() : _indicator{true}, _gain{AS7265X_GAIN_16X}
4043
flxRegister(readWithLED, "Enable LED", "Measure with LED enabled");
4144
flxRegister(enableIndicator, "Enable Indicator", "Indicator LED enabled");
4245
flxRegister(sensorGain, "Gain", "Gain settings for sensor");
46+
flxRegister(measureMode, "Measurement Mode", "Mode use when taking measurements");
47+
flxRegister(intCycles, "Integration Cycles", "The number of cycles per reading (n * 2.8ms)");
48+
flxRegister(whiteCurrent, "White LED Current", "White LED current - milli amps");
49+
flxRegister(irCurrent, "IR LED Current", "IR LED current - milli amps");
50+
flxRegister(indicatorCurrent, "Indicator Current", "Indicator current - milli amps");
51+
4352
flxRegister(outputCal, "Calibrated Output", "Return calibrated values");
4453

4554
// Register output params
@@ -95,15 +104,21 @@ bool flxDevAS7265X::onInitialize(TwoWire &wirePort)
95104
{
96105
bool status = AS7265X::begin(wirePort);
97106

107+
// if initialization was successful - true - set parameters
98108
if (status)
99109
{
100110
AS7265X::setGain(_gain);
111+
AS7265X::setMeasurementMode(_mmode);
112+
AS7265X::setIntegrationCycles(_icycles);
113+
AS7265X::setIndicatorCurrent(_ind_current);
114+
AS7265X::setBulbCurrent(_white_current, AS7265x_LED_WHITE);
115+
AS7265X::setBulbCurrent(_ir_current, AS7265x_LED_IR);
101116
}
102117
return status;
103118
}
104119

105120
//---------------------------------------------------------------------------
106-
// Indicator property
121+
// Indicator property - getter/setter
107122
//---------------------------------------------------------------------------
108123
bool flxDevAS7265X::get_indicator(void)
109124
{
@@ -124,7 +139,7 @@ void flxDevAS7265X::set_indicator(bool isOn)
124139
}
125140

126141
//---------------------------------------------------------------------------
127-
// Gain property
142+
// Gain property - getter/setter
128143
//---------------------------------------------------------------------------
129144

130145
uint8_t flxDevAS7265X::get_gain(void)
@@ -138,9 +153,84 @@ void flxDevAS7265X::set_gain(uint8_t value)
138153
if (isInitialized())
139154
AS7265X::setGain(value);
140155
}
156+
157+
//---------------------------------------------------------------------------
158+
// Measurement Mode property - getter/setter
159+
//---------------------------------------------------------------------------
160+
uint8_t flxDevAS7265X::get_mmode(void)
161+
{
162+
return _mmode;
163+
}
164+
165+
void flxDevAS7265X::set_mmode(uint8_t value)
166+
{
167+
_mmode = value;
168+
if (isInitialized())
169+
AS7265X::setMeasurementMode(value);
170+
}
171+
172+
//---------------------------------------------------------------------------
173+
// Integration Cycles property - getter/setter
174+
//---------------------------------------------------------------------------
175+
uint8_t flxDevAS7265X::get_icycles(void)
176+
{
177+
return _icycles;
178+
}
179+
180+
void flxDevAS7265X::set_icycles(uint8_t value)
181+
{
182+
_icycles = value;
183+
if (isInitialized())
184+
AS7265X::setIntegrationCycles(value);
185+
}
186+
187+
//---------------------------------------------------------------------------
188+
// Indicator Current property - getter/setter
189+
//---------------------------------------------------------------------------
190+
uint8_t flxDevAS7265X::get_ind_current(void)
191+
{
192+
return _ind_current;
193+
}
194+
195+
void flxDevAS7265X::set_ind_current(uint8_t value)
196+
{
197+
_ind_current = value;
198+
if (isInitialized())
199+
AS7265X::setIndicatorCurrent(value);
200+
}
201+
202+
//---------------------------------------------------------------------------
203+
// White LED Current property - getter/setter
204+
//---------------------------------------------------------------------------
205+
uint8_t flxDevAS7265X::get_white_current(void)
206+
{
207+
return _white_current;
208+
}
209+
210+
void flxDevAS7265X::set_white_current(uint8_t value)
211+
{
212+
_white_current = value;
213+
if (isInitialized())
214+
AS7265X::setBulbCurrent(value, AS7265x_LED_WHITE);
215+
}
216+
217+
//---------------------------------------------------------------------------
218+
// IR LED Current property - getter/setter
219+
//---------------------------------------------------------------------------
220+
uint8_t flxDevAS7265X::get_ir_current(void)
221+
{
222+
return _ir_current;
223+
}
224+
225+
void flxDevAS7265X::set_ir_current(uint8_t value)
226+
{
227+
_ir_current = value;
228+
if (isInitialized())
229+
AS7265X::setBulbCurrent(value, AS7265x_LED_IR);
230+
}
141231
//---------------------------------------------------------------------------
142232
///
143-
/// @brief Called right before data parameters are read - take measurments called
233+
/// @brief Called right before data parameters are read - take measurements called
144234
///
145235

146236
bool flxDevAS7265X::execute(void)

src/Flux/flxDevAS7265x.h

Lines changed: 65 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525

2626
#define kAS7265xDeviceName "AS7265X"
2727

28+
#define kAS7265xDefaultIntCycles 49
29+
2830
// Define our class
2931
class flxDevAS7265X : public flxDeviceI2CType<flxDevAS7265X>, public AS7265X
3032
{
@@ -53,16 +55,41 @@ class flxDevAS7265X : public flxDeviceI2CType<flxDevAS7265X>, public AS7265X
5355
private:
5456
// property methods
5557

58+
// Indicator pro getter/setter/stash
5659
bool get_indicator(void);
5760
void set_indicator(bool);
58-
5961
bool _indicator;
6062

63+
// gain pro getter/setter/stash
6164
uint8_t get_gain(void);
6265
void set_gain(uint8_t);
63-
6466
uint8_t _gain;
6567

68+
// Measurement Mode pro getter/setter/stash
69+
uint8_t get_mmode(void);
70+
void set_mmode(uint8_t);
71+
uint8_t _mmode;
72+
73+
// Integration Cycles pro getter/setter/stash
74+
uint8_t get_icycles(void);
75+
void set_icycles(uint8_t);
76+
uint8_t _icycles;
77+
78+
// Indicator current pro getter/setter/stash
79+
uint8_t get_ind_current(void);
80+
void set_ind_current(uint8_t);
81+
uint8_t _ind_current;
82+
83+
// White LED current pro getter/setter/stash
84+
uint8_t get_white_current(void);
85+
void set_white_current(uint8_t);
86+
uint8_t _white_current;
87+
88+
// IR LED current pro getter/setter/stash
89+
uint8_t get_ir_current(void);
90+
void set_ir_current(uint8_t);
91+
uint8_t _ir_current;
92+
6693
// Parameter methods
6794
bool read_output_type(void);
6895
float read_A(void);
@@ -98,10 +125,46 @@ class flxDevAS7265X : public flxDeviceI2CType<flxDevAS7265X>, public AS7265X
98125

99126
flxPropertyBool<flxDevAS7265X> outputCal = {true};
100127

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

133+
// Measurement mode prop
134+
flxPropertyRWUint8<flxDevAS7265X, &flxDevAS7265X::get_mmode, &flxDevAS7265X::set_mmode> measureMode = {
135+
AS7265X_MEASUREMENT_MODE_6CHAN_ONE_SHOT,
136+
{{"STUV Channels", AS7265X_MEASUREMENT_MODE_4CHAN},
137+
{"RTUW Channels", AS7265X_MEASUREMENT_MODE_4CHAN_2},
138+
{"6 Channel Continuous", AS7265X_MEASUREMENT_MODE_6CHAN_CONTINUOUS},
139+
{"6 Channel 1 Shot", AS7265X_MEASUREMENT_MODE_6CHAN_ONE_SHOT}}};
140+
141+
// Integration Cycles
142+
flxPropertyRWUint8<flxDevAS7265X, &flxDevAS7265X::get_icycles, &flxDevAS7265X::set_icycles> intCycles = {
143+
kAS7265xDefaultIntCycles, 0, 255};
144+
145+
// Indicator Current prop
146+
flxPropertyRWUint8<flxDevAS7265X, &flxDevAS7265X::get_ind_current, &flxDevAS7265X::set_ind_current>
147+
indicatorCurrent = {AS7265X_INDICATOR_CURRENT_LIMIT_8MA,
148+
{{"1 ma", AS7265X_INDICATOR_CURRENT_LIMIT_1MA},
149+
{"2 ma", AS7265X_INDICATOR_CURRENT_LIMIT_2MA},
150+
{"4 ma", AS7265X_INDICATOR_CURRENT_LIMIT_4MA},
151+
{"8 ma", AS7265X_INDICATOR_CURRENT_LIMIT_8MA}}};
152+
153+
// White LED Current prop
154+
flxPropertyRWUint8<flxDevAS7265X, &flxDevAS7265X::get_white_current, &flxDevAS7265X::set_white_current>
155+
whiteCurrent = {AS7265X_LED_CURRENT_LIMIT_12_5MA,
156+
{{"12.5 ma", AS7265X_LED_CURRENT_LIMIT_12_5MA},
157+
{"25 ma", AS7265X_LED_CURRENT_LIMIT_25MA},
158+
{"50 ma", AS7265X_LED_CURRENT_LIMIT_50MA},
159+
{"100 ma", AS7265X_LED_CURRENT_LIMIT_100MA}}};
160+
161+
// IR LED Current prop
162+
flxPropertyRWUint8<flxDevAS7265X, &flxDevAS7265X::get_ir_current, &flxDevAS7265X::set_ir_current> irCurrent = {
163+
AS7265X_LED_CURRENT_LIMIT_12_5MA,
164+
{{"12.5 ma", AS7265X_LED_CURRENT_LIMIT_12_5MA},
165+
{"25 ma", AS7265X_LED_CURRENT_LIMIT_25MA},
166+
{"50 ma", AS7265X_LED_CURRENT_LIMIT_50MA}}};
167+
105168
// Outputs
106169
// define parameters for calibrarted outputs
107170
flxParameterOutBool<flxDevAS7265X, &flxDevAS7265X::read_output_type> outputType;

0 commit comments

Comments
 (0)