ArduinoMega2560_SPI 1.0
Cargando...
Buscando...
Nada coincide
pinout.h
Ir a la documentación de este archivo.
1#ifndef PINS_H
2#define PINS_H
3
4#include <Arduino.h>
5#include "system/msg/msg.h"
6
7/**
8 * @struct PinInfo
9 * @brief Representa un pin del sistema con nombre simbólico, número físico y familia funcional.
10 *
11 * Esta estructura permite describir cada pin de forma clara y tipada,
12 * facilitando diagnósticos, documentación y uso en tiempo de compilación.
13 *
14 * @param name Nombre simbólico del pin (ej. "PIN_PWM_10").
15 * @param number Número físico del pin en la placa Arduino.
16 * @param family Familia funcional (ej. "GPIO", "PWM", "ANALOG", "UART_RX").
17 */
18struct PinInfo {
19 const char* name; // Symbolic name of the pin
20 int number; // Physical pin number on the board
21 const char* family; // Pin family or category (e.g., "PWM", "GPIO")
22
23 /// Constructor constexpr para permitir uso en evaluaciones de tiempo de compilación
24 constexpr PinInfo(const char* n, int num, const char* fam) : name(n), number(num), family(fam) {}
25};
26
27
28/**
29 * @namespace Pins
30 * @brief Contiene todos los arrays de pines organizados por familia funcional.
31 *
32 * Este namespace agrupa:
33 * - UART RX/TX
34 * - SPI
35 * - I2C
36 * - INTERRUPTS
37 * - ANALOG
38 * - PWM
39 * - GPIO
40 *
41 * Además, define constantes con el número total de pines por familia.
42 */
43namespace Pins {
44
45 /**
46 * @brief Pines UART RX (recepción serie asíncrona).
47 */
48 inline constexpr PinInfo UART_RX[] = {
49 {"PIN_RX0", 0, "UART_RX"},
50 {"PIN_RX1", 19, "UART_RX"},
51 {"PIN_RX2", 17, "UART_RX"},
52 {"PIN_RX3", 15, "UART_RX"},
53 };
54
55 /**
56 * @brief Pines UART TX (transmisión serie asíncrona).
57 */
58 inline constexpr PinInfo UART_TX[] = {
59 {"PIN_TX0", 1, "UART_TX"},
60 {"PIN_TX1", 18, "UART_TX"},
61 {"PIN_TX2", 16, "UART_TX"},
62 {"PIN_TX3", 14, "UART_TX"},
63 };
64
65 /**
66 * @brief Pines SPI (comunicación síncrona maestro-esclavo).
67 */
68 inline constexpr PinInfo SPI[] = {
69 {"PIN_MISO", 50, "SPI"},
70 {"PIN_MOSI", 51, "SPI"},
71 {"PIN_SCK", 52, "SPI"},
72 {"PIN_SS", 53, "SPI"},
73 };
74
75 /**
76 * @brief Pines I2C / TWI (comunicación de dos hilos).
77 */
78 inline constexpr PinInfo I2C[] = {
79 {"PIN_SDA", 20, "I2C"},
80 {"PIN_SCL", 21, "I2C"},
81 };
82
83 /**
84 * @brief Pines de interrupciones externas.
85 */
86 inline constexpr PinInfo INTERRUPTS[] = {
87 {"INT_0", 2, "INTERRUPTS"},
88 {"INT_1", 3, "INTERRUPTS"},
89 {"INT_2", 21, "INTERRUPTS"},
90 {"INT_3", 20, "INTERRUPTS"},
91 {"INT_4", 19, "INTERRUPTS"},
92 {"INT_5", 18, "INTERRUPTS"},
93 };
94
95 /**
96 * @brief Pines analógicos (ADC).
97 */
98 inline constexpr PinInfo ANALOG[] = {
99 {"PIN_ANALOG_A00", 54, "ANALOG"},
100 {"PIN_ANALOG_A01", 55, "ANALOG"},
101 {"PIN_ANALOG_A02", 56, "ANALOG"},
102 {"PIN_ANALOG_A03", 57, "ANALOG"},
103 {"PIN_ANALOG_A04", 58, "ANALOG"},
104 {"PIN_ANALOG_A05", 59, "ANALOG"},
105 {"PIN_ANALOG_A06", 60, "ANALOG"},
106 {"PIN_ANALOG_A07", 61, "ANALOG"},
107 {"PIN_ANALOG_A08", 62, "ANALOG"},
108 {"PIN_ANALOG_A90", 63, "ANALOG"},
109 {"PIN_ANALOG_A10", 64, "ANALOG"},
110 {"PIN_ANALOG_A11", 65, "ANALOG"},
111 {"PIN_ANALOG_A12", 66, "ANALOG"},
112 {"PIN_ANALOG_A13", 67, "ANALOG"},
113 {"PIN_ANALOG_A14", 68, "ANALOG"},
114 {"PIN_ANALOG_A15", 69, "ANALOG"},
115 };
116
117 /**
118 * @brief Pines PWM (modulación por ancho de pulso).
119 */
120 inline constexpr PinInfo PWM[] = {
121 {"PIN_PWM_02", 2, "PWM"},
122 {"PIN_PWM_03", 3, "PWM"},
123 {"PIN_PWM_04", 4, "PWM"},
124 {"PIN_PWM_05", 5, "PWM"},
125 {"PIN_PWM_06", 6, "PWM"},
126 {"PIN_PWM_07", 7, "PWM"},
127 {"PIN_PWM_08", 8, "PWM"},
128 {"PIN_PWM_09", 9, "PWM"},
129 {"PIN_PWM_10", 10, "PWM"},
130 {"PIN_PWM_11", 11, "PWM"},
131 {"PIN_PWM_12", 12, "PWM"},
132 {"PIN_PWM_44", 44, "PWM"},
133 {"PIN_PWM_45", 45, "PWM"},
134 {"PIN_PWM_46", 46, "PWM"}
135 };
136
137 /**
138 * @brief Pines GPIO (entrada/salida digital general).
139 */
140 inline constexpr PinInfo GPIO[] = {
141 {"PIN_GPIO_13", 13, "GPIO"},
142 {"PIN_GPIO_22", 22, "GPIO"},
143 {"PIN_GPIO_23", 23, "GPIO"},
144 {"PIN_GPIO_24", 24, "GPIO"},
145 {"PIN_GPIO_25", 25, "GPIO"},
146 {"PIN_GPIO_26", 26, "GPIO"},
147 {"PIN_GPIO_27", 27, "GPIO"},
148 {"PIN_GPIO_28", 28, "GPIO"},
149 {"PIN_GPIO_29", 29, "GPIO"},
150 {"PIN_GPIO_30", 30, "GPIO"},
151 {"PIN_GPIO_31", 31, "GPIO"},
152 {"PIN_GPIO_32", 32, "GPIO"},
153 {"PIN_GPIO_33", 33, "GPIO"},
154 {"PIN_GPIO_34", 34, "GPIO"},
155 {"PIN_GPIO_35", 35, "GPIO"},
156 {"PIN_GPIO_36", 36, "GPIO"},
157 {"PIN_GPIO_37", 37, "GPIO"},
158 {"PIN_GPIO_38", 38, "GPIO"},
159 {"PIN_GPIO_39", 39, "GPIO"},
160 {"PIN_GPIO_40", 40, "GPIO"},
161 {"PIN_GPIO_41", 41, "GPIO"},
162 {"PIN_GPIO_42", 42, "GPIO"},
163 {"PIN_GPIO_43", 43, "GPIO"},
164 {"PIN_GPIO_44", 44, "GPIO"},
165 {"PIN_GPIO_45", 45, "GPIO"},
166 {"PIN_GPIO_46", 46, "GPIO"},
167 {"PIN_GPIO_47", 47, "GPIO"},
168 {"PIN_GPIO_48", 48, "GPIO"},
169 {"PIN_GPIO_49", 49, "GPIO"},
170 {"PIN_GPIO_50", 50, "GPIO"},
171 {"PIN_GPIO_51", 51, "GPIO"},
172 {"PIN_GPIO_52", 52, "GPIO"},
173 {"PIN_GPIO_53", 53, "GPIO"},
174 };
175
176 /// @brief Número total de pines por familia
177 constexpr size_t NUM_ANALOG = sizeof(ANALOG) / sizeof(ANALOG[0]);
178 constexpr size_t NUM_GPIO = sizeof(GPIO) / sizeof(GPIO[0]);
179 constexpr size_t NUM_PWM = sizeof(PWM) / sizeof(PWM[0]);
180 constexpr size_t NUM_UART_RX = sizeof(UART_RX) / sizeof(UART_RX[0]);
181 constexpr size_t NUM_UART_TX = sizeof(UART_TX) / sizeof(UART_TX[0]);
182 constexpr size_t NUM_SPI = sizeof(SPI) / sizeof(SPI[0]);
183 constexpr size_t NUM_I2C = sizeof(I2C) / sizeof(I2C[0]);
184 constexpr size_t NUM_INTERRUPTS = sizeof(INTERRUPTS) / sizeof(INTERRUPTS[0]);
185
186}
187
188
189/**
190 * @brief Devuelve el número físico del pin.
191 */
192uint8_t pinNumber(const PinInfo pin);
193
194/**
195 * @brief Devuelve el nombre simbólico del pin.
196 */
197const char* pinName(const PinInfo pin);
198
199/**
200 * @brief Devuelve la familia funcional del pin.
201 */
202const char* pinFamily(const PinInfo pin);
203
204/**
205 * @brief Comprueba si un pin pertenece a la familia GPIO.
206 */
207bool isValidGPIO(const PinInfo& pin);
208
209/**
210 * @brief Comprueba si un pin pertenece a la familia PWM.
211 */
212bool isValidPWM(const PinInfo& pin);
213
214/**
215 * @brief Comprueba si un pin pertenece a la familia ANALOG.
216 */
217bool isValidAnalog(const PinInfo& pin);
218
219
220/**
221 * @brief Diagnóstico de pines analógicos.
222 */
223void diagnoseAnalog();
224
225/**
226 * @brief Diagnóstico de pines GPIO.
227 */
228void diagnoseGPIO();
229
230/**
231 * @brief Diagnóstico de pines PWM.
232 */
233void diagnosePWM();
234
235/**
236 * @brief Ejecuta todos los diagnósticos de pines.
237 */
239
240#endif // PINS_H
Contiene todos los arrays de pines organizados por familia funcional.
constexpr PinInfo GPIO[]
Pines GPIO (entrada/salida digital general).
Definition pinout.h:140
constexpr PinInfo INTERRUPTS[]
Pines de interrupciones externas.
Definition pinout.h:86
constexpr size_t NUM_UART_RX
Definition pinout.h:180
constexpr size_t NUM_GPIO
Definition pinout.h:178
constexpr size_t NUM_INTERRUPTS
Definition pinout.h:184
constexpr size_t NUM_SPI
Definition pinout.h:182
constexpr PinInfo SPI[]
Pines SPI (comunicación síncrona maestro-esclavo).
Definition pinout.h:68
constexpr PinInfo UART_RX[]
Pines UART RX (recepción serie asíncrona).
Definition pinout.h:48
constexpr PinInfo UART_TX[]
Pines UART TX (transmisión serie asíncrona).
Definition pinout.h:58
constexpr PinInfo PWM[]
Pines PWM (modulación por ancho de pulso).
Definition pinout.h:120
constexpr size_t NUM_ANALOG
Número total de pines por familia.
Definition pinout.h:177
constexpr size_t NUM_I2C
Definition pinout.h:183
constexpr PinInfo I2C[]
Pines I2C / TWI (comunicación de dos hilos).
Definition pinout.h:78
constexpr size_t NUM_UART_TX
Definition pinout.h:181
constexpr size_t NUM_PWM
Definition pinout.h:179
constexpr PinInfo ANALOG[]
Pines analógicos (ADC).
Definition pinout.h:98
bool isValidGPIO(const PinInfo &pin)
Comprueba si un pin pertenece a la familia GPIO.
Definition pinout.cpp:196
bool isValidAnalog(const PinInfo &pin)
Comprueba si un pin pertenece a la familia ANALOG.
Definition pinout.cpp:234
void diagnosePWM()
Diagnóstico de pines PWM.
Definition pinout.cpp:126
const char * pinFamily(const PinInfo pin)
Devuelve la familia funcional del pin.
Definition pinout.cpp:185
void diagnoseAnalog()
Diagnóstico de pines analógicos.
Definition pinout.cpp:37
const char * pinName(const PinInfo pin)
Devuelve el nombre simbólico del pin.
Definition pinout.cpp:174
void fullDiagnosticsPins()
Ejecuta todos los diagnósticos de pines.
Definition pinout.cpp:16
uint8_t pinNumber(const PinInfo pin)
Devuelve el número físico del pin.
Definition pinout.cpp:163
bool isValidPWM(const PinInfo &pin)
Comprueba si un pin pertenece a la familia PWM.
Definition pinout.cpp:215
void diagnoseGPIO()
Diagnóstico de pines GPIO.
Definition pinout.cpp:85
Representa un pin del sistema con nombre simbólico, número físico y familia funcional.
Definition pinout.h:18
int number
Definition pinout.h:20
const char * family
Definition pinout.h:21
const char * name
Definition pinout.h:19
constexpr PinInfo(const char *n, int num, const char *fam)
Constructor constexpr para permitir uso en evaluaciones de tiempo de compilación.
Definition pinout.h:24