Print ist eine abstrakte Klasse, kann also selbst nicht instanziiert werden, stellt aber Methoden zur Verfügung, die die Ausgabe von einer Reihe von ObjektTypen erleichtern. Die diversen print()- und println()-Methoden der Klasse Print erzeugen einen Text, der für das übergebene Objekt ausgegeben werden soll, und übergeben diesen Text zeichenweise an die Methode write(). write() selbst ist in Print nicht implementiert (abstrakte Methode), sondern muss in einer konkreten Klasse, die für die Ausgabe über eine vorhandene Hardware-Einheit zuständig ist, für diese Hardware passend zugeschnitten sein.
Weiterhin steht mit setWriteError(), getWriteError() und clearWriteError() ein Methodensatz zur Fehlermeldung zur Verfügung.
Methoden | |||
virtual size_t | write (uint8_t a) = 0 | Gibt ein einzelnes Zeichen über die Hardware aus. Der Rückgabewert ist die Anzahl der ausgegebenen Zeichen. | Diese Funktion muss von einer auf die Hardware zugeschnitten Klasse überschrieben werden. |
virtual size_t | write (const uint8_t *buffer, size_t size) | Gibt ein Byte-Array aus. Der Rückgabewert ist die Anzahl der ausgegebenen Zeichen. | In der Implementierung dieser Methode
in Print wird der Puffer zeichenweise an |
size_t | write (const char *str) | Gibt einen C-String aus. Das abschließende '\0' wird nicht mit ausgegeben. Der Rückgabewert ist die Anzahl der ausgegebenen Zeichen. | Die Stringlänge wird über strlen ermitteln und dann an write (const uint8_t *buffer, size_t size) weitergeleitet. |
size_t | print (char c) | Gibt ein einzelnes Zeichen aus. Der Rückgabewert ist Der Rückgabewert ist die Anzahl der ausgegebenen Zeichen. | |
size_t | print (const char str[]) | Gibt einen C-String aus. Das abschließende '\0' wird nicht mit ausgegeben. Der Rückgabewert ist die Anzahl der ausgegebenen Zeichen. | Wird direkt an write (const char *str) weiter gegegeben. |
size_t | print (const String &s) | Ausgabe eines Objekts der Klasse String. Der Rückgabewert ist die Anzahl der ausgegebenen Zeichen. | |
size_t | print (unsigned char n, int base = DEC) | Ausgabe einer Ganzzahl. Die Basis ist auf Dezimal voreingestellt. Der Rückgabewert ist die Anzahl der ausgegebenen Zeichen. | Arduino stellt für die Basisangabe die Konstanten BIN, OCT, DEC und HEX zur Verfügung. Als Basis ist im Prinzip jede positive Ganzzahl > 1 möglich. Die Angabe einer Basis < 2 kann zu merkwürdigem Verhalten führen. Im besten Fall wird einfach als Basis 10 genommen. |
size_t | print (int n, int base = DEC) | s.o. | |
size_t | print (unsigned int , int base = DEC) | s.o. | |
size_t | print (long n, int base = DEC) | s.o. | |
size_t | print (unsigned long n, int base = DEC) | s.o. | |
size_t | print (double , int digits = 2) | Ausgabe einer Fließkommazahl. Die Anzahl der Dezimalstellen ist auf 2 voreingestellt. Der Rückgabewert ist die Anzahl der ausgegebenen Zeichen. | Neben den regulären Zahlen kann das IEEE-754-Gleitkommazahlenformat nicht darstellbare Zahlen verwalten. Dies sind nan (Not a Number, z.B. bei sqrt(-1)) und inf (Infinity, z.B. bei 1 / 0). Diese werden als "nan" und "inf" ausgegeben. Überschreitet der Zahlenwert ±4294967040.0 wird "ovf" ausgegeben. |
size_t | print (const Printable &) | Ausgabe eines Objekts einer Klasse die von Printable abgeleitet ist. Der Rückgabewert ist die Anzahl der ausgegebenen Zeichen. | Die Rückgabewert wird von der konkreten Methode der Klasse festgelegt. |
size_t |
print (const __FlashStringHelper *) | Ausgabe einer Zeichenkette, die unter Benutzung des Makros F() im Flash abgelegt wird. Der Rückgabewert ist die Anzahl der ausgegebenen Zeichen. | Serial.print(F("Hallo"));
"Hallo" wird im Flash abgelegt. |
size_t | println (void) | Ausgabe eines Zeilenvorschubs. Der Rückgabewert ist die Anzahl der ausgegebenen Zeichen. | Es wird '\r\n' ausgegeben. |
size_t | println (...) | Wie die entsprechende print-Methode mit anschließendem Zeilenvorschub. Der Rückgabewert ist die Anzahl der ausgegebenen Zeichen. | Es wird print(...) aufgerufen und danach println(). |
protected void |
setWriteError (int err=1) | Ermöglicht einer Klasse, die Print implementiert, einen Fehlercode zu setzen. | |
int |
getWriteError () | Liefert den letzten Fehlercode der bei einer Schreiboperation aufgetreten ist. | Die Fehlercodes werden durch die konkrete Klasse festgelegt, die Print implementiert. |
void | clearWriteError () | Löscht den Fehlercode. |
Siehe auch:
Klasse
Printable
Klasse Stream
:: How
to Use the Print Class ::
Arduino-Anatomie: How
to Print!?
Leider besitzt Print keine Methoden zur Ausgabe von 64-Bit-Zahlen (int64_t, uint64_t, long long, ...). Dies lässt sich aber einfach nachrüsten.
In Print.h müssen Prototypen für die neuen Methoden hinterlegt werden:
...
size_t println(void); // <- Letzte Zeile im Original
// Support für 64-Bit Zahlen hinzugefügt (30.1.2016)
size_t println(int64_t, uint8_t = DEC);
size_t print(int64_t, uint8_t = DEC);
size_t println(uint64_t, uint8_t = DEC);
size_t print(uint64_t, uint8_t = DEC);
In Print.cpp müssen die Methoden definiert werden. Der folgende Code wird einfach hinten angefügt.
// Support für 64-Bit Zahlen hinzugefügt (30.1.2016)
size_t ICACHE_FLASH_ATTR Print::println(int64_t number, uint8_t base)
{ size_t n = 0;
n += print(number, base);
n += println();
return n;
}
size_t ICACHE_FLASH_ATTR Print::print(int64_t number, uint8_t base)
{ size_t n = 0;
if (number < 0)
{ write('-');
number = -number;
n++;
}
n += print((uint64_t)number, base);
return n;
}
size_t ICACHE_FLASH_ATTR Print::println(uint64_t number, uint8_t base)
{ size_t n = 0;
n += print((uint64_t)number, base);
n += println();
return n;
}
size_t ICACHE_FLASH_ATTR Print::print(uint64_t number, uint8_t base)
{ size_t n = 0;
unsigned char buf[64];
uint8_t i = 0;
if (number == 0)
{ n += print((char)'0');
return n;
}
if (base < 2) base = 2;
else if (base > 16) base = 16;
while (number > 0)
{ uint64_t q = number/base;
buf[i++] = number - q*base;
number = q;
}
for (; i > 0; i--)
n += write((char) (buf[i - 1] < 10 ?
'0' + buf[i - 1] :
'A' + buf[i - 1] - 10));
return n;
}
Das Attribut ICACHE_FLASH_ATTR sind für den ESP8266 und kann in der Standard-Arduino-Version entfallen.