Einfaches Serial Debug für Variablen mit ##varName?

Hallo,

ist es möglich folgenden Code zum seriellen Debuggen einer Variablen:

int variable1 = 123;
//Seriel Debugging
Serial.print("variable1 = ");Serial.print(varibale1);

durch folgende Abkürzung/Vereinfachung zu ersetzen?:

#define SerialDebug(var); Serial.print("##var = ");Serial.print(var);
//...
int variable2 = 456;
SerialDebug(variable2);

Problem: mit "" wir genau ##var ausgegeben, ohne "" meckert der Compiler :confused:

Vielen Dank!

Eine Raute weniger. ## ist für das Konkatenieren von Strings:
https://gcc.gnu.org/onlinedocs/cpp/Stringification.html#Stringification

#define DEBUG

#ifdef DEBUG
  #define SerialDebug(var) Serial.print(#var); Serial.print(" = "); Serial.println(var);
#else
  #define SerialDebug(var)
#endif

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

void loop()
{
  int test1 = 52;
  char test2[] = "string";

  SerialDebug(test1);
  SerialDebug(test2);

  delay(1000);
}

Wenn du #define DEBUG auskommentierst, kannst du mit einer Zeile alle Debug Ausgaben abschalten :slight_smile:

Klasse! Vielen Dank!! :wink:

Was muss ich beachten, wenn der ganze Serial Code in eine mySerial.h und mySerial.cpp gewandert ist, und ich aber gerne das #Define DEBUG im Hautsketch (.ino) setzen möchte oder nicht?

Ich habe gelesen, dass das #Define dann vor dem #include mySerial.h im .ino erfolgen muss. Führt leider bei mir nicht zum gewünschten Erfolg. Ich nutze aber auch #define DEBUG0 = 1 und dann #if (DEBUG0 == 1).

Mal ein Paar Code-Schnipsel (das ganze ist schon recht umfänglich):

mySerial.h

#ifndef mySerial_h                                  // prevent of multiple includings
#define mySerial_h 



//### Includes ##########################################################################
#include <Arduino.h>                                // general Arduino defines
#include "myHelper.h"                               // Helper Defines 



//### Defines setable ###################################################################
#define WITH_SERIAL     1                           // 1: with Serial, 0: no Serial
#define DEBUG_0_enable  1                           // for FCN-execution
#define DEBUG_1_enable  0                           // for...

//...

//### WITH SERIAL #######################################################################
#if (WITH_SERIAL == 1)                              // Only if def. with Serial
 //...

extern bool debug_0;
#if (DEBUG_0_enable == 1)
#define DEBUG_0(a,b,c,d,e); if(debug_0){SPRF("> ");SPR(millis());\
                          SPRF("\t");SPR(a);SPRF("\t");SPR(b);\
                          SPRF("\t");SPR(c);SPRF("\t");SPR(d);\
                          SPRF("\t");SPR(e);}
#define DEBUGL_0(a,b,c,d,e); if(debug_0){DEBUG_0(a,b,c,d,e);}
#else
#define DEBUG_0(a,b,c,d,e); a;b;c;d;e;              // Debug Disabeld
#define DEBUGL_0(a,b,c,d,e); a;b;c;d;e;             // Debug Disabeld

#endif

//...

Und in der .ino würde ich dann gerne die Defines Setzen statt im Serial.h - geht das? .ino-File:

//### Defines setable ###################################################################
//#define WITH_SERIAL     1                           // 1: with Serial, 0: no Serial in mySerial.h
#define RS232_SPEED     230400                      // Serial Speed [Baud]
//#define DEBUG_0_enable  1                           // for FCN-execution
//#define DEBUG_1_enable  0                           // for...
//***************************************************************************************



//### Includes ##########################################################################
#include "mySerial.h"                               // my Serial Defines
#include "myHelper.h"                               // Helper Defines 

//...