21
21
#define __ADVANCED_ADC_H__
22
22
23
23
#include " AdvancedAnalog.h"
24
+ #if __has_include("pure_analog_pins.h")
25
+ #include " pure_analog_pins.h"
26
+ #endif
24
27
25
28
struct adc_descr_t ;
26
29
@@ -41,14 +44,25 @@ class AdvancedADC {
41
44
adc_descr_t *descr;
42
45
PinName adc_pins[AN_MAX_ADC_CHANNELS];
43
46
47
+ template <typename P>
48
+ static inline PinName _toPinName (P p) {
49
+ return analogPinToPinName (p);
50
+ }
51
+ #if __has_include("pure_analog_pins.h")
52
+ static inline PinName _toPinName (PureAnalogPin p) {
53
+ extern AnalogPinDescription g_pureAAnalogPinDescription[];
54
+ return g_pureAAnalogPinDescription[p.get ()].name ;
55
+ }
56
+ #endif
57
+
44
58
public:
45
- template <typename ... T >
46
- AdvancedADC (pin_size_t p0, T ... args ): n_channels(0 ), descr(nullptr ) {
47
- static_assert (sizeof ...(args ) < AN_MAX_ADC_CHANNELS,
59
+ template <typename P0, typename ... P >
60
+ AdvancedADC (P0 p0, P ... pins ): n_channels(0 ), descr(nullptr ) {
61
+ static_assert (sizeof ...(pins ) < AN_MAX_ADC_CHANNELS,
48
62
" A maximum of 16 channels can be sampled successively." );
49
63
50
- for (auto p : {p0, args ...}) {
51
- adc_pins[n_channels++] = analogPinToPinName (p) ;
64
+ for (PinName pin : { _toPinName (p0), _toPinName (pins) ... }) {
65
+ adc_pins[n_channels++] = pin ;
52
66
}
53
67
}
54
68
AdvancedADC (): n_channels(0 ), descr(nullptr ) {
@@ -72,6 +86,21 @@ class AdvancedADC {
72
86
n_channels = n_pins;
73
87
return begin (resolution, sample_rate, n_samples, n_buffers, start, sample_time);
74
88
}
89
+ #if __has_include("pure_analog_pins.h")
90
+ int begin (uint32_t resolution, uint32_t sample_rate, size_t n_samples,
91
+ size_t n_buffers, size_t n_pins, PureAnalogPin *pins, bool start=true ,
92
+ adc_sample_time_t sample_time=AN_ADC_SAMPLETIME_8_5) {
93
+ if (n_pins > AN_MAX_ADC_CHANNELS) {
94
+ n_pins = AN_MAX_ADC_CHANNELS;
95
+ }
96
+ for (size_t i = 0 ; i < n_pins; ++i) {
97
+ adc_pins[i] = _toPinName (pins[i]);
98
+ }
99
+
100
+ n_channels = n_pins;
101
+ return begin (resolution, sample_rate, n_samples, n_buffers, start, sample_time);
102
+ }
103
+ #endif
75
104
int start (uint32_t sample_rate);
76
105
int stop ();
77
106
void clear ();
0 commit comments