Motivation

Manchmal sollen die Kontroll- oder Fehlermeldungen, die i.d.R. über das Serial-Objekt ausgegeben werden, nicht im Ausgabestrom dieses Objekt erscheinen. Bei den Urs-Bibliotheksroutinen habe ich mir deshalb angewöhnt, eine Referenz auf ein Objekt der Klasse Print als Methoden-Parameter mit zu übergeben, über das die Ausgabe erfolgen soll. Bei Bedarf lassen sich auch mehrere solcher Objekte verwenden, z.B. eins für die Ausgabe eines Protokolls und eins für Fehlermeldungen (analog zu stdout und stderr bei Unix- oder Windows-Systemen). Ebenso einfach ist es dann auch, die Ausgabe über eine TCP-Verbindung zu senden, z.B. durch Verwendung der WiFiClient-Klasse des ESP8266 oder komfortabler mit der UrsWiFiSerial-Klasse.

Wenn man eine Meldungsausgabe ganz unterdrücken will, geht das nicht so einfach. Eine Objekt-Referenz kann z.B. nicht durch NULL ersetzt werden, wie dies bei Pointern möglich. Der Compiler verlangt die Angabe einer konkreten Instanz einer Klasse, die von Print abgeleitet ist. Das verhindert, das irgendein nicht kompatibles Objekt übergeben wird, wie es z.B. mit Pointern möglich wird.

UrsDummyPrint kann zur Unterdrückung von Meldungen verwandt werden. Die Klasse ist von Print abgeleitet und überschreibt die Methode size_t write(uint8_t x) ohne Ausgabe des übergebenen Zeichens.

Implementierung

UrsDummyPrint.h:

// UrsDummyPrint
//
// Autor: http://UllisRoboterSeite.de
// Doku:  http://ullisroboterseite.de/esp8266-UrsDummyPrint.html
// Created: 2017-04-27
//
// Version 1.0 (2017-01-11)
// - Basis-Version

#ifndef _URSDUMMYPRINT_h
#define _URSDUMMYPRINT_h

#if defined(ARDUINO) && ARDUINO >= 100
	#include "arduino.h"
#else
	#include "WProgram.h"
#endif

class UrsDummyPrintClass : public Print {
 public:
   size_t write(uint8_t x) { return 1; };
};

extern UrsDummyPrintClass UrsDummyPrint;

#endif

UrsDummyPrint.cpp:

// UrsDummyPrint
//
// Autor: http://UllisRoboterSeite.de
// Doku:  http://ullisroboterseite.de/esp8266-UrsDummyPrint.html

#include "UrsDummyPrint.h"

UrsDummyPrintClass UrsDummyPrint;

Download

Das ZIP-Archiv für Bibliothek UrsDummyPrint zum Download. Die entpackten Dateien ins Verzeichnis <user>\Documents\Arduino\libraries kopieren (siehe Installing Additional Arduino Libraries).

Das Archiv enthält die Bibliotheksdateien