Skip to content

Commit 44f57bd

Browse files
authored
Update AdvancedADC.h
1 parent 7fb56df commit 44f57bd

File tree

1 file changed

+58
-3
lines changed

1 file changed

+58
-3
lines changed

src/AdvancedADC.h

+58-3
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ class AdvancedADC {
3131
size_t n_channels;
3232
adc_descr_t *descr;
3333
PinName adc_pins[AN_MAX_ADC_CHANNELS];
34+
bool dualMode;
35+
uint8_t selectedADC;
3436

3537
public:
3638
template <typename ... T>
@@ -41,21 +43,74 @@ class AdvancedADC {
4143
for (auto p : {p0, args...}) {
4244
adc_pins[n_channels++] = analogPinToPinName(p);
4345
}
46+
dualMode=false;
47+
selectedADC=0;
4448
}
4549
AdvancedADC(): n_channels(0), descr(nullptr) {}
4650
~AdvancedADC();
4751
bool available();
4852
SampleBuffer read();
49-
int begin(uint32_t resolution, uint32_t sample_rate, size_t n_samples, size_t n_buffers);
50-
int begin(uint32_t resolution, uint32_t sample_rate, size_t n_samples, size_t n_buffers, size_t n_pins, pin_size_t *pins) {
53+
int begin(uint32_t resolution, uint32_t sample_rate, size_t n_samples, size_t n_buffers, bool do_start=true,uint8_t adcNum=0);
54+
int begin(uint32_t resolution, uint32_t sample_rate, size_t n_samples, size_t n_buffers, size_t n_pins, pin_size_t *pins, bool start=true,uint8_t fixed_adc=0) {
5155
if (n_pins > AN_MAX_ADC_CHANNELS) n_pins = AN_MAX_ADC_CHANNELS;
5256
for (size_t i = 0; i < n_pins; ++i) {
5357
adc_pins[i] = analogPinToPinName(pins[i]);
5458
}
59+
5560
n_channels = n_pins;
56-
return begin(resolution, sample_rate, n_samples, n_buffers);
61+
return begin(resolution, sample_rate, n_samples, n_buffers,start,fixed_adc);
5762
}
63+
64+
void clear();
65+
66+
int start(uint32_t sample_rate);
67+
68+
//void setADCDualMode(bool dm);
69+
//int enableDualMode();
70+
//int disableDualMode();
71+
5872
int stop();
5973
};
6074

75+
class AdvancedADCDual {
76+
private:
77+
size_t n_channels;
78+
pin_size_t adc_pins_unmapped[AN_MAX_ADC_CHANNELS];
79+
AdvancedADC *adcIN1;
80+
AdvancedADC *adcIN2;
81+
public:
82+
83+
//For now ADC1 will always be one pin, and ADC2 will sample the rest
84+
template <typename ... T>
85+
AdvancedADCDual(pin_size_t p0, T ... args):n_channels(0), adcIN1(nullptr), adcIN2(nullptr){
86+
static_assert(sizeof ...(args) < AN_MAX_ADC_CHANNELS+1,
87+
"A maximum of 5 channels can be sampled successively.");
88+
static_assert (sizeof ...(args) >=2,
89+
"At least two channels are required for Dual Mode ADC.");
90+
for (auto p : {p0, args...}) {
91+
adc_pins_unmapped[n_channels++] = p;
92+
}
93+
}
94+
95+
AdvancedADCDual(): n_channels(0), adcIN1(nullptr), adcIN2(nullptr)
96+
{
97+
}
98+
~AdvancedADCDual();
99+
100+
int begin(AdvancedADC *in1, AdvancedADC *in2,uint32_t resolution, uint32_t sample_rate, size_t n_samples, size_t n_buffers);
101+
int begin(AdvancedADC *in1, AdvancedADC *in2,uint32_t resolution, uint32_t sample_rate,
102+
size_t n_samples, size_t n_buffers, size_t n_pins, pin_size_t *pins) {
103+
if (n_pins > AN_MAX_ADC_CHANNELS) n_pins = AN_MAX_ADC_CHANNELS;
104+
if(n_pins<2) //Cannot run Dual mode with less than two input pins
105+
return(0);
106+
for (size_t i = 0; i < n_pins; ++i) {
107+
adc_pins_unmapped[i] = pins[i];
108+
Serial.println("Pin: "+String(pins[i]));
109+
}
110+
n_channels = n_pins;
111+
return begin(in1, in2, resolution, sample_rate, n_samples, n_buffers);
112+
}
113+
int stop();
114+
};
115+
61116
#endif /* ARDUINO_ADVANCED_ADC_H_ */

0 commit comments

Comments
 (0)