@@ -31,6 +31,8 @@ class AdvancedADC {
31
31
size_t n_channels;
32
32
adc_descr_t *descr;
33
33
PinName adc_pins[AN_MAX_ADC_CHANNELS];
34
+ bool dualMode;
35
+ uint8_t selectedADC;
34
36
35
37
public:
36
38
template <typename ... T>
@@ -41,21 +43,74 @@ class AdvancedADC {
41
43
for (auto p : {p0, args...}) {
42
44
adc_pins[n_channels++] = analogPinToPinName (p);
43
45
}
46
+ dualMode=false ;
47
+ selectedADC=0 ;
44
48
}
45
49
AdvancedADC (): n_channels(0 ), descr(nullptr ) {}
46
50
~AdvancedADC ();
47
51
bool available ();
48
52
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 ) {
51
55
if (n_pins > AN_MAX_ADC_CHANNELS) n_pins = AN_MAX_ADC_CHANNELS;
52
56
for (size_t i = 0 ; i < n_pins; ++i) {
53
57
adc_pins[i] = analogPinToPinName (pins[i]);
54
58
}
59
+
55
60
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 );
57
62
}
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
+
58
72
int stop ();
59
73
};
60
74
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
+
61
116
#endif /* ARDUINO_ADVANCED_ADC_H_ */
0 commit comments