Streaming mit DEBUG-Schalter

Hi,

kann man für Streaming-Ausgaben irgendwie elegant einen DEBUG-Schalter einsetzen?

Ich mache in meinen Projekten für serielle DEBUG-Ausgaben immer folgendes:

// DEBUG-STUFF
//#define DEBUG // uncomment this for Serial-Debug-output
#ifdef DEBUG
 #define DEBUG_PRINT(x)     Serial.print (x)
 #define DEBUG_PRINTLN(x)   Serial.println (x)
#else
 #define DEBUG_PRINT(x)
 #define DEBUG_PRINTLN(x)
#endif 

und dann:
 DEBUG_PRINTLN (F("Hier steht die DEBUG-Ausgabe"))

Wenn ich eine Streaming-Ausgabe nutzen will:Serial << char_0 << " - "<< char_1 << " - "<< char_2 << " - "<< char_3 << endl;

Kann man das auch irgendwie lösen?

Lass dir den kompletten String mit sprintf zusammensetzen. Die Zeichenkette kannst du dann direkt an Serial.print oder an etwas leeres übergeben.

Wieso printf()? Das geht genauso wie mit Serial.print() auch

#ifdef DEBUG
 #define DEBUG_PRINT(x)  (Serial << x)
 #define DEBUG_PRINTLN(x)  (Serial << x << endl)
#else
 #define DEBUG_PRINT(x)
 #define DEBUG_PRINTLN(x)
#endif

Yep, funzt.

Statt so:

Serial << char_0 << " - "<< char_1 << " - "<< char_2 << " - "<< char_3 << endl;

dann so:

DEBUG_PRINTLN (char_0 << " - "<< char_1 << " - "<< char_2 << " - "<< char_3);

Danke Serenifly :sunglasses:

Du musst dass so einfach sehen, dass solche primitiven Makros nichts anderes als Textersetzungen sind. Was du links als x übergibst wird rechts 1:1 bei x eingesetzt und dann kompiliert.

Das gefällt mir immer so an deine Antworten: praktische Lösung + themenbezogene Theorie
Wenns nur immer auf fruchtbaren Boden bei mir fallen würde.... :grin:
Bist du im didaktischen Bereich tätig?