Serial.readBytesUntil() reads characters from the serial buffer into an array. The function terminates (checks being done in this order) if the determined length has been read, if it times out (see
Serial.setTimeout()), or if the terminator character is detected (in which case the function returns the characters up to the last character before the supplied terminator). The terminator itself is not returned in the buffer.
Serial.readBytesUntil() inherits from the Stream utility class.
Use the following function to read characters from the serial port and store them in a buffer until a terminator is found:
Serial.readBytesUntil(character, buffer, length)
The function admits the following objects and parameters:
Serial: serial port object. See the list of available serial ports for each board on the Serial main page.
character: the character to search for. Allowed data types: char.
buffer: the buffer to store the bytes in. Allowed data types: array of char or byte.
length: the number of bytes to read. Allowed data types: int.
The function returns the number of characters read into the buffer. A 0 means that the length parameter <= 0, a time-out occurred before any other input, or a termination character was found before any other input. Data type: size_t.
The following code reads until a given character is found and stores the data in a buffer to then print it:
char message[20]; // Buffer to hold the message
void setup() {
Serial.begin(9600);
while (!Serial);
Serial.println("Type a message (end with Enter):");
}
void loop() {
if (Serial.available()) {
int bytesRead = Serial.readBytesUntil('\n', message, sizeof(message) - 1);
message[bytesRead] = '\0'; // Null-terminate the string
Serial.print("You said: ");
Serial.println(message);
}
}
The terminator character is discarded from the serial buffer, unless the number of characters read and copied into the buffer equals length.