DEBUG

De Arduino
Saltar a: navegación, buscar

Durante el desarrollo, todos usamos Serial.print() para ayudar a depurar nuestro código. Cuando las cosas parecen estables, volvemos y eliminamos el código de depuración... solo para descubrir unos días después que necesitamos nuevamente el código de depuración. Una buena solucion es dejar todo el código de depuración donde corresponde y solo modificar esta linea:

Sintaxis

#define DEBUG
#ifdef DEBUG 
   Serial.print("Algunas cosas de depuración"); 
   //Más código de depuración ... 
#endif

Para desactivas solo comente la primera linea:

//#define DEBUG
#ifdef DEBUG 
   Serial.print("Algunas cosas de depuración"); 
   //Más código de depuración ... 
#endif

Comentarios

Cuando comentar la primera linea logras que uC defina que DEBUG desaparezca comentándolo. Como ya no está definido en el programa, cualquier elemento entre el #ifdef y el #endif ya no forma parte del archivo fuente desde el punto de vista del compilador. Esto facilita agregar y eliminar código de depuración.

Ejemplos

#define DEBUG
#ifdef DEBUG
 #define DEBUG_PRINT(x)     Serial.print(x)
 #define DEBUG_PRINTDEC(x)  Serial.print(x, DEC)
 #define DEBUG_PRINTLN(x)   Serial.println(x)
#else
 #define DEBUG_PRINT(x)
 #define DEBUG_PRINTDEC(x)
 #define DEBUG_PRINTLN(x) 
#endif

Ejemplo 1

Imprimir una matriz

#define DEBUG_ARRAY(a) {
   for (int index=0; index<sizeof(a)/sizeof(a[0]); index++){
      Serial.print(a[index]); 
      Serial.print('\t');
   } 
   Serial.println();
};
String str = "";
const chr separador = ',';
const byte largo = 3;
int datos[largo];

void setup(){
   Serial.begin(115200);
}

void loop(){
   if (Serial.available()){
      str = Serial.readStringUntil('\n');
      for (byte i=0; i<largo ; i++){
         int indice = str.indexOf(separador);
         datos[i] = str.substring(0, indice).toInt();
         str = str.substring(indice + 1);
      }
      DEBUG_ARRAY(data);
   }
}

Ejemplo 2

#define DEBUG(a) Serial.println(a);
String texto = "-123.45";
 
void setup(){
   Serial.begin(9600);
   float valor = texto.toFloat();
   DEBUG(valor);
}
 
void loop(){
   //Nada.
}

Vea también

Referencias