Serial.readBytes()

Beschreibung

Serial.readBytes() liest Zeichen vom seriellen Port in einen Puffer. Die Funktion wird beendet, wenn die ermittelte Länge gelesen wurde oder das Zeitlimit überschritten wurde (siehe Serial.setTimeout()).

Serial.readBytes() gibt die Anzahl der Zeichen in den Puffer zurück. Eine 0 bedeutet, dass keine gültigen Daten gefunden wurden.

Serial.readBytes() erbt von der Stream-Dienstklasse.

Syntax

Serial.readBytes(buffer, length)

Parameter

  • Serial: Serielles Port-Objekt. Die Liste der verfügbaren seriellen Anschlüsse für jedes Board auf der Serial-Hauptseite.
  • buffer: Der Puffer zum Speichern der Bytes. Erlaubte Datentypen: Array von char oder byte.
  • length: Die Anzahl der zu lesenden Bytes. Erlaubte Datentypen: int.

Rückgabewert

Die Anzahl der Bytes, die im Puffer abgelegt wurden. Datentyp: size_t.

Beispielcode

const int BUFFER_SIZE = 50; char buf[BUFFER_SIZE]; void setup() { Serial.begin(9600); // opens serial port, sets data rate to 9600 bps } void loop() { // check if data is available if (Serial.available() > 0) { // read the incoming bytes: int rlen = Serial.readBytes(buf, BUFFER_SIZE); // prints the received data Serial.print("I received: "); for(int i = 0; i < rlen; i++) Serial.print(buf[i]); } }
  • Type "HELLO" on Serial Monitor and click Send button:
  • COM6
    Send
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  
  • Das ergebnis am seriellen monitor:
  • COM6
    Send
    I received: HELLO
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

※ Anmerkungen und Warnungen:

  • Serial.readBytes() may read a stream of bytes in multiple times (resulting in multiple fragments). To read a stream of bytes at one time, there are two ways:
    • Based on the delimiter: Use Serial.readBytesUntil() with delimiter.
    • Based on the fixed length: Wait until the fixed number of bytes is available. for example:
const int BUFFER_SIZE = 5; char buf[BUFFER_SIZE]; void setup() { Serial.begin(9600); // opens serial port, sets data rate to 9600 bps } void loop() { // check if data is available if (Serial.available() >= BUFFER_SIZE) { // read the incoming bytes: Serial.readBytes(buf, BUFFER_SIZE); // TODO: PROCESS THE INCOMING DATA HERE } }
  • Make sure that the read length does NOT exceed the buffer size. The below is the best practice:
const int BUFFER_SIZE = 5; char buf[BUFFER_SIZE]; // application buffer void setup() { Serial.begin(9600); // opens serial port, sets data rate to 9600 bps } void loop() { // check if data is available int rxlen = Serial.available(); // number of bytes available in Serial buffer if (rxlen > 0) { int rlen; // number of bytes to read if (rxlen > BUFFER_SIZE) // check if the data exceeds the buffer size rlen = BUFFER_SIZE; // if yes, read BUFFER_SIZE bytes. The remaining will be read in the next time else rlen = rxlen; // read the incoming bytes: rlen = Serial.readBytes(buf, rlen); // TODO: PROCESS THE INCOMING DATA HERE } }
  • Serial functions are not only used for the communication between an Arduino board and Serial Monitor of Arduino IDE but also used for the communication between:
    • An Arduino board and other Arduino board
    • An Arduino board and other sensors/devices
    • An Arduino board and computer (any Serial software on computer)

Siehe Auch

ARDUINO KAUFEMPFEHLUNG

Arduino UNO R3
Arduino Starter Kit
Bitte Beachten: Dies sind Partnerschaftslinks. Wenn Sie die Komponenten über diese Links Kaufen, können wir eine Provision erhalten, ohne weitere Kosten für Sie. Wir Schätzen es.

※ UNSERE BOTSCHAFTEN