Skip to content

Commit df1ac73

Browse files
fpistmMCUdude
andcommitted
Allow non contiguous analog pins definition
Signed-off-by: Frederic Pillon <[email protected]> Co-Authored-By: MCUdude <[email protected]>
1 parent 8375489 commit df1ac73

File tree

1 file changed

+65
-6
lines changed

1 file changed

+65
-6
lines changed

cores/arduino/pins_arduino.h

+65-6
Original file line numberDiff line numberDiff line change
@@ -51,116 +51,170 @@ enum {
5151
};
5252

5353
// Arduino analog pins
54-
#ifndef NUM_ANALOG_INPUTS
55-
#define NUM_ANALOG_INPUTS 0
56-
#endif
57-
#ifndef NUM_ANALOG_FIRST
58-
#define NUM_ANALOG_FIRST NUM_DIGITAL_PINS
59-
#endif
54+
// If NUM_ANALOG_INPUTS is not defined there is no analog pins defined.
55+
// Anyway ADC internal channels are always avaialable.
56+
#if defined(NUM_ANALOG_INPUTS) && (NUM_ANALOG_INPUTS>0)
6057

58+
// If NUM_ANALOG_FIRST is defined, analog pins are defined contiguous
59+
// and defined hereafter
60+
#ifdef NUM_ANALOG_FIRST
6161
// Analog pins must be contiguous to be able to loop on each value
6262
#define MAX_ANALOG_INPUTS 24
6363
_Static_assert(NUM_ANALOG_INPUTS <= MAX_ANALOG_INPUTS,
6464
"Core NUM_ANALOG_INPUTS limited to MAX_ANALOG_INPUTS");
6565
_Static_assert(NUM_ANALOG_FIRST >= NUM_ANALOG_INPUTS,
6666
"First analog pin value (A0) must be greater than or equal to NUM_ANALOG_INPUTS");
67+
#endif /* NUM_ANALOG_FIRST */
6768

6869
#if NUM_ANALOG_INPUTS > 0
70+
#ifndef PIN_A0
6971
#define PIN_A0 NUM_ANALOG_FIRST
72+
#endif
7073
static const uint8_t A0 = PIN_A0;
7174
#endif
7275
#if NUM_ANALOG_INPUTS > 1
76+
#ifndef PIN_A1
7377
#define PIN_A1 (PIN_A0 + 1)
78+
#endif
7479
static const uint8_t A1 = PIN_A1;
7580
#endif
7681
#if NUM_ANALOG_INPUTS > 2
82+
#ifndef PIN_A2
7783
#define PIN_A2 (PIN_A1 + 1)
84+
#endif
7885
static const uint8_t A2 = PIN_A2;
7986
#endif
8087
#if NUM_ANALOG_INPUTS > 3
88+
#ifndef PIN_A3
8189
#define PIN_A3 (PIN_A2 + 1)
90+
#endif
8291
static const uint8_t A3 = PIN_A3;
8392
#endif
8493
#if NUM_ANALOG_INPUTS > 4
94+
#ifndef PIN_A4
8595
#define PIN_A4 (PIN_A3 + 1)
96+
#endif
8697
static const uint8_t A4 = PIN_A4;
8798
#endif
8899
#if NUM_ANALOG_INPUTS > 5
100+
#ifndef PIN_A5
89101
#define PIN_A5 (PIN_A4 + 1)
102+
#endif
90103
static const uint8_t A5 = PIN_A5;
91104
#endif
92105
#if NUM_ANALOG_INPUTS > 6
106+
#ifndef PIN_A6
93107
#define PIN_A6 (PIN_A5 + 1)
108+
#endif
94109
static const uint8_t A6 = PIN_A6;
95110
#endif
96111
#if NUM_ANALOG_INPUTS > 7
112+
#ifndef PIN_A7
97113
#define PIN_A7 (PIN_A6 + 1)
114+
#endif
98115
static const uint8_t A7 = PIN_A7;
99116
#endif
100117
#if NUM_ANALOG_INPUTS > 8
118+
#ifndef PIN_A8
101119
#define PIN_A8 (PIN_A7 + 1)
120+
#endif
102121
static const uint8_t A8 = PIN_A8;
103122
#endif
104123
#if NUM_ANALOG_INPUTS > 9
124+
#ifndef PIN_A9
105125
#define PIN_A9 (PIN_A8 + 1)
126+
#endif
106127
static const uint8_t A9 = PIN_A9;
107128
#endif
108129
#if NUM_ANALOG_INPUTS > 10
130+
#ifndef PIN_A10
109131
#define PIN_A10 (PIN_A9 + 1)
132+
#endif
110133
static const uint8_t A10 = PIN_A10;
111134
#endif
112135
#if NUM_ANALOG_INPUTS > 11
136+
#ifndef PIN_A11
113137
#define PIN_A11 (PIN_A10 + 1)
138+
#endif
114139
static const uint8_t A11 = PIN_A11;
115140
#endif
116141
#if NUM_ANALOG_INPUTS > 12
142+
#ifndef PIN_A12
117143
#define PIN_A12 (PIN_A11 + 1)
144+
#endif
118145
static const uint8_t A12 = PIN_A12;
119146
#endif
120147
#if NUM_ANALOG_INPUTS > 13
148+
#ifndef PIN_A13
121149
#define PIN_A13 (PIN_A12 + 1)
150+
#endif
122151
static const uint8_t A13 = PIN_A13;
123152
#endif
124153
#if NUM_ANALOG_INPUTS > 14
154+
#ifndef PIN_A14
125155
#define PIN_A14 (PIN_A13 + 1)
156+
#endif
126157
static const uint8_t A14 = PIN_A14;
127158
#endif
128159
#if NUM_ANALOG_INPUTS > 15
160+
#ifndef PIN_A15
129161
#define PIN_A15 (PIN_A14 + 1)
162+
#endif
130163
static const uint8_t A15 = PIN_A15;
131164
#endif
132165
#if NUM_ANALOG_INPUTS > 16
166+
#ifndef PIN_A16
133167
#define PIN_A16 (PIN_A15 + 1)
168+
#endif
134169
static const uint8_t A16 = PIN_A16;
135170
#endif
136171
#if NUM_ANALOG_INPUTS > 17
172+
#ifndef PIN_A17
137173
#define PIN_A17 (PIN_A16 + 1)
174+
#endif
138175
static const uint8_t A17 = PIN_A17;
139176
#endif
140177
#if NUM_ANALOG_INPUTS > 18
178+
#ifndef PIN_A18
141179
#define PIN_A18 (PIN_A17 + 1)
180+
#endif
142181
static const uint8_t A18 = PIN_A18;
143182
#endif
144183
#if NUM_ANALOG_INPUTS > 19
184+
#ifndef PIN_A19
145185
#define PIN_A19 (PIN_A18 + 1)
186+
#endif
146187
static const uint8_t A19 = PIN_A19;
147188
#endif
148189
#if NUM_ANALOG_INPUTS > 20
190+
#ifndef PIN_A20
149191
#define PIN_A20 (PIN_A19 + 1)
192+
#endif
150193
static const uint8_t A20 = PIN_A20;
151194
#endif
152195
#if NUM_ANALOG_INPUTS > 21
196+
#ifndef PIN_A21
153197
#define PIN_A21 (PIN_A20 + 1)
198+
#endif
154199
static const uint8_t A21 = PIN_A21;
155200
#endif
156201
#if NUM_ANALOG_INPUTS > 22
202+
#ifndef PIN_A22
157203
#define PIN_A22 (PIN_A21 + 1)
204+
#endif
158205
static const uint8_t A22 = PIN_A22;
159206
#endif
160207
#if NUM_ANALOG_INPUTS > 23
208+
#ifndef PIN_A23
161209
#define PIN_A23 (PIN_A22 + 1)
210+
#endif
162211
static const uint8_t A23 = PIN_A23;
163212
#endif
213+
#else
214+
#ifndef NUM_ANALOG_INPUTS
215+
#define NUM_ANALOG_INPUTS 0
216+
#endif
217+
#endif /* NUM_ANALOG_INPUTS */
164218

165219
// Default for Arduino connector compatibility
166220
// SPI Definitions
@@ -236,10 +290,15 @@ uint32_t pinNametoDigitalPin(PinName p);
236290
// Convert an analog pin number to a digital pin number
237291
#if defined(NUM_ANALOG_INPUTS) && (NUM_ANALOG_INPUTS>0)
238292
// Used by analogRead api to have A0 == 0
293+
#ifndef analogInputToDigitalPin
294+
// Default one for contiguous analog pins definition
239295
#define analogInputToDigitalPin(p) (((uint32_t)p < NUM_ANALOG_INPUTS) ? (p+A0) : p)
296+
#endif
240297
#else
298+
// No analog pin defined
241299
#define analogInputToDigitalPin(p) (NUM_DIGITAL_PINS)
242300
#endif
301+
243302
// Convert an analog pin number Axx to a PinName PX_n
244303
PinName analogInputToPinName(uint32_t pin);
245304

0 commit comments

Comments
 (0)