ArduinoMega2560_SPI 1.0
Cargando...
Buscando...
Nada coincide
pinout.cpp
Ir a la documentación de este archivo.
1// Include the necessary headers
2#include <Arduino.h>
4
5
6/**
7 * @brief Ejecuta un diagnóstico completo de los pines digitales GPIO, PWM y analógicos.
8 *
9 * Esta función:
10 * - Muestra un mensaje de inicio del diagnóstico.
11 * - Llama a diagnoseAnalog(), diagnoseGPIO() y diagnosePWM().
12 * - Muestra un mensaje de finalización.
13 *
14 * Útil como prueba inicial del hardware al arrancar el sistema.
15 */
17 standardMessage("Starting PINOUT diagnostic", __FILE__, __FUNCTION__, __DATE__, __TIME__);
18
19 diagnoseAnalog(); // ANALOG pin diagnostic
20 diagnoseGPIO(); // GPIO pin diagnostic
21 diagnosePWM(); // PWM pin diagnosticº
22
23 standardHeaderFull("Full diagnostic complete.", __FILE__, __FUNCTION__, __DATE__, __TIME__);
24};
25
26
27/**
28 * @brief Diagnostica el voltaje presente en los pines analógicos del sistema.
29 *
30 * Recorre todos los pines definidos en `Pins::ANALOG`, los configura como entrada,
31 * estabiliza la señal y realiza una lectura analógica. Convierte el valor leído
32 * a voltaje (asumiendo referencia de 5V) y lo muestra por Serial.
33 *
34 * @note Incluye pequeñas demoras para estabilizar la señal.
35 * @warning Asegúrate de que el sistema use referencia de 5V para lecturas precisas.
36 */
38 standardHeaderFull("⚡ Detecting external voltage on ANALOG pins:", __FILE__, __FUNCTION__, __DATE__, __TIME__);
39
40 for (size_t i = 0; i < Pins::NUM_ANALOG; ++i) {
41 const PinInfo& pin = Pins::ANALOG[i];
42
43 //Forze the pin to OUTPUT for redux noise and stabily electric system
44 pinMode(pin.number, OUTPUT);
45 digitalWrite(pin.number, LOW);
46 delay(20);
47
48 //Read the pin as INPUT to detect voltage
49 pinMode(pin.number, INPUT);
50 delay(20);
51
52 int value = analogRead(pin.number); // Read analog value
53 delay(20);
54 float voltage = value * (5.0 / 1023.0); // Convert to voltage (assuming 5V reference)
55
56 //Forze the pin to OUTPUT for redux noise and stabily electric system
57 pinMode(pin.number, OUTPUT);
58 digitalWrite(pin.number, LOW);
59 delay(20);
60
61 //State for default pin for init system
62 pinMode(pin.number, INPUT);
63 delay(20);
64
65 Serial.print("• ");
66 Serial.print(pin.name);
67 Serial.print(" [#");
68 Serial.print(pin.number);
69 Serial.print("] → Voltage: ");
70 Serial.print(voltage,2);
71 Serial.println(" V");
72
73 };
74};
75
76
77/**
78 * @brief Diagnóstico de pines GPIO configurados como entrada.
79 *
80 * Configura cada pin GPIO como INPUT, estabiliza la señal y lee su estado.
81 * Informa si el pin tiene voltaje externo (HIGH) o está en LOW/GND.
82 *
83 * @note Útil para detectar si un pin está conectado a tierra o flotando.
84 */
86 standardHeaderFull("⚡ Detecting external voltage on GPIO pins:", __FILE__, __FUNCTION__, __DATE__, __TIME__);
87
88 for (size_t i = 0; i < Pins::NUM_GPIO; ++i) {
89 const PinInfo& pin = Pins::GPIO[i];
90
91 //Forze the pin to OUTPUT for redux noise and stabily electric system
92 pinMode(pin.number, OUTPUT);
93 digitalWrite(pin.number, LOW);
94 delay(20);
95
96 pinMode(pin.number, INPUT); // Set pin as input without pull-up
97 delay(5); // Allow signal to stabilize
98
99 int state = digitalRead(pin.number); // Read pin state
100
101 Serial.print("• ");
102 Serial.print(pin.name);
103 Serial.print(" [#");
104 Serial.print(pin.number);
105 Serial.print("] → Voltage: ");
106
107 if (state == HIGH) {
108 Serial.println("⚡ External voltage detected (HIGH)");
109 } else {
110 Serial.println("🔻 No voltage (LOW or connected to GND)");
111 }
112 }
113
114}
115
116
117/**
118 * @brief Detecta la presencia de voltaje externo en pines PWM.
119 *
120 * Configura cada pin PWM como entrada, estabiliza la señal y lee su estado digital.
121 * Informa si hay voltaje (HIGH) o no (LOW/GND).
122 *
123 * @note No mide voltaje real, solo estado lógico.
124 * @note Para medir voltaje real, usar pines analógicos.
125 */
127 standardHeaderFull("⚡ Detecting voltage on PWM pins:", __FILE__, __FUNCTION__, __DATE__, __TIME__);
128
129 for (size_t i = 0; i < Pins::NUM_PWM; ++i) {
130 const PinInfo& pin = Pins::PWM[i];
131
132 //Forze the pin to OUTPUT for redux noise and stabily electric system
133 pinMode(pin.number, OUTPUT);
134 analogWrite(pin.number, 0);
135 delay(20);
136
137 pinMode(pin.number, INPUT); // Set pin as input (no pull-up)
138 delay(5); // Brief delay to stabilize reading
139
140 int state = digitalRead(pin.number); // Read the electrical state of the pin
141
142 Serial.print("• ");
143 Serial.print(pin.name);
144 Serial.print(" [Pin ");
145 Serial.print(pin.number);
146 Serial.print("] → Voltage: ");
147
148 if (state == HIGH) {
149 Serial.println("⚡ Voltage detected (HIGH)");
150 } else {
151 Serial.println("🔻 No voltage (LOW or connected to GND)");
152 };
153 };
154};
155
156
157/**
158 * @brief Devuelve el número físico del pin.
159 *
160 * @param pin Estructura PinInfo.
161 * @return Número del pin.
162 */
163uint8_t pinNumber(const PinInfo pin) {
164 return pin.number;
165}
166
167
168/**
169 * @brief Devuelve el nombre del pin.
170 *
171 * @param pin Estructura PinInfo.
172 * @return Nombre del pin.
173 */
174const char* pinName(const PinInfo pin) {
175 return pin.name;
176}
177
178
179/**
180 * @brief Devuelve la familia del pin (GPIO, PWM, ANALOG, etc.).
181 *
182 * @param pin Estructura PinInfo.
183 * @return Familia del pin.
184 */
185const char* pinFamily(const PinInfo pin) {
186 return pin.family;
187}
188
189
190/**
191 * @brief Verifica si un pin pertenece a la familia GPIO.
192 *
193 * @param pin Pin a validar.
194 * @return true si es GPIO válido, false si no.
195 */
196bool isValidGPIO(const PinInfo& pin) {
197 for (size_t i = 0; i < Pins::NUM_GPIO; ++i) {
198 if (Pins::GPIO[i].number == pin.number &&
199 Pins::GPIO[i].family == pin.family)
200 {
201 return true;
202 }
203 }
204
205 return false;
206};
207
208
209/**
210 * @brief Verifica si un pin pertenece a la familia PWM.
211 *
212 * @param pin Pin a validar.
213 * @return true si es PWM válido, false si no.
214 */
215bool isValidPWM(const PinInfo& pin) {
216 for (size_t i = 0; i < Pins::NUM_PWM; ++i) {
217 if (Pins::PWM[i].number == pin.number &&
218 Pins::PWM[i].family == pin.family)
219 {
220 return true;
221 }
222 }
223
224 return false;
225};
226
227
228/**
229 * @brief Verifica si un pin pertenece a la familia ANALOG.
230 *
231 * @param pin Pin a validar.
232 * @return true si es ANALOG válido, false si no.
233 */
234bool isValidAnalog(const PinInfo& pin) {
235 for (size_t i = 0; i < Pins::NUM_ANALOG; ++i) {
236 if (Pins::ANALOG[i].number == pin.number &&
237 Pins::ANALOG[i].family == pin.family)
238 {
239 return true;
240 }
241 }
242
243 return false;
244};
void standardMessage(const char *message, const char *file, const char *function, const char *date, const char *time)
Prints an enriched log message to the serial monitor.
Definition msg.cpp:15
void standardHeaderFull(const char *message, const char *file, const char *function, const char *date, const char *time, uint16_t width=120, char deco='-')
Prints a decorated header with centered text and padding on both sides.
Definition msg.cpp:121
constexpr PinInfo GPIO[]
Pines GPIO (entrada/salida digital general).
Definition pinout.h:140
constexpr size_t NUM_GPIO
Definition pinout.h:178
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_PWM
Definition pinout.h:179
constexpr PinInfo ANALOG[]
Pines analógicos (ADC).
Definition pinout.h:98
bool isValidGPIO(const PinInfo &pin)
Verifica si un pin pertenece a la familia GPIO.
Definition pinout.cpp:196
bool isValidAnalog(const PinInfo &pin)
Verifica si un pin pertenece a la familia ANALOG.
Definition pinout.cpp:234
void diagnosePWM()
Detecta la presencia de voltaje externo en pines PWM.
Definition pinout.cpp:126
const char * pinFamily(const PinInfo pin)
Devuelve la familia del pin (GPIO, PWM, ANALOG, etc.).
Definition pinout.cpp:185
void diagnoseAnalog()
Diagnostica el voltaje presente en los pines analógicos del sistema.
Definition pinout.cpp:37
const char * pinName(const PinInfo pin)
Devuelve el nombre del pin.
Definition pinout.cpp:174
void fullDiagnosticsPins()
Ejecuta un diagnóstico completo de los pines digitales GPIO, PWM y analógicos.
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)
Verifica si un pin pertenece a la familia PWM.
Definition pinout.cpp:215
void diagnoseGPIO()
Diagnóstico de pines GPIO configurados como entrada.
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