Klasse HardwareSerial : public Stream

Stream Print

Die  Klasse HardwareSerial ist für das Ausgeben und Einlesen von Daten über die in den ATmega integrierten UARTs zuständig. Für die in Stream und Print deklarierten abstrakten Methoden werden hardwarespezifisch implementiert. Über HardwareSerial.cpp werden außerdem Objekte für jede vorhandene UART angelegt. Dieses heißt ist im Regelfall Serial. Existieren weitere Schnittstellen werden diese mit Serial1, Serial2, usw. angelegt.

Die Ansteuerung der Hardware erfolgt interruptgetrieben. Zur Zwischenpufferung der Daten wird sowohl ein Empfangspuffer als auch ein Sendepuffer von jeweils 64 Byte angelegt (Beträgt die Größe des SRAM weniger als 1000 Byte wird nur jeweils 16  Bytes große Puffer genutzt).

Methoden
constructor HardwareSerial (ring_buffer *rx_buffer, ring_buffer *tx_buffer,
volatile uint8_t *ubrrh,
volatile uint8_t *ubrrl,
volatile uint8_t *ucsra,
volatile uint8_t *ucsrb,
volatile uint8_t *ucsrc,
volatile uint8_t *udr,
uint8_t rxen, uint8_t txen, uint8_t rxcie, uint8_t udrie, uint8_t u2x)
Initialisiert eine neune Instanz der Klasse HardwareSerial. Übergeben werden Pointer auf die angelegten Puffer, die Adressen der entsprechenden UART-Register und die Position diverser Control-Bits innerhalb der Register. In HardwareSerial.cpp wird für jede vorhandene UART ein entsprechendes Pufferpaar angelegt. Ein Pointer auf diese Puffer (struct ring_buffer) wird bei der Anlage der Serialx-Objekte übergeben.
void  begin (unsigned long baud) Initialisiert die Schnittstelle mit der angegebenen Baudrate und der Konfiguration 8N1.  Sendefunktion,  Empfangsfunktion und die zugehörigen Interrupts werden freigegeben.
Siehe auch Arduino-Referenz
void  begin (unsigned long baud, byte config)  Initialisiert die Schnittstelle mit der angegebenen Baudrate und der angegebenen Konfiguration. Die sinnvollen Konfigurationen stehen als vorbelegte Konstanten zur Verfügung (SERIAL_5N1...SERIAL_8O2). s.o.
void  end () Beendet die Übertragung und gibt die Übertragungs-Pins zur Nutzung als allgemeine IO-Pins frei. Wartet ab, bis der Sendepuffer geleert ist und schaltet dann die Sendefunktion, Empfangsfunktion und die Interrupts ab. Löscht den Empfangspuffer.
Siehe auch Arduino-Referenz
virtual int available () Liefert die Anzahl Bytes, die aktuell eingelesen werden können, also bereits gepuffert wurden. Siehe auch Arduino-Referenz
virtual int read () Liest ein Byte aus dem Puffer und liefert es zurück. Der Rückgabewert -1 signalisiert, dass das aktuell keine Daten zur Verfügung stehen. Diese Funktion muss von einer auf die Hardware zugeschnitten Klasse überschrieben werden.
Siehe auch Arduino-Referenz
virtual int peek () Liest ein Byte aus dem Stream ohne es zu entfernen. Ein mehrfaches Aufrufen von peek() liefert immer das gleiche Ergebnis, das auch ein Aufruf von read() liefern würde. Der Rückgabewert -1 bedeutet, dass kein Zeichen zum auslesen vorhanden ist. Siehe auch Arduino-Referenz
virtual int write (uint8_t c) Übergibt ein Byte in den Sendepuffer und startet die Übertragung. Der Rückgabewert ist 1.  Ist der Puffer voll, wird gewartet, bis wieder ein Byte frei ist.
Siehe auch Arduino-Referenz 
 inline size_t write (unsigned long n)  Das letzte Byte von n wird als uint8_t behandelt.  Vorsicht mögliche Seiteneffekte: Konterkariert die C++-Typ-Prüfung!
 inline size_t write (long n)  s.o . s.o. 
 inline size_t write (unsigned int n)  s.o.  s.o. 
 inline size_t write (int n)  s.o.  s.o. 
operator bool Zeigt an, ob die angegebene serielle Schnittstellebereit ist.
Bei einem Leonardo zeigt if (Serial) an, ob die USB CDC Serial Connection geöffnet ist. In allen anderen Fällen, einschließlich if (Serial1) beim Leonardo, wird immer true zurückgeliefert.  
 
virtual void flush () Löscht alle Puffer für diesen Stream und veranlasst die Ausgabe aller gepufferten Daten an das zugrunde liegende Gerät. Diese Funktion muss von einer auf die Hardware zugeschnitten Klasse überschrieben werden.
Siehe auch Arduino-Referenz

Siehe auch:
Klasse Print
Klasse Stream
Arduino-Referenz
Arduino-Anatomie: How to Print!?