Serial.readBytesUntil()

Описание

Serial.readBytesUntil() читает символы из буфера последовательного порта в массив. Функция завершается (проверки выполняются в этом порядке), если прочитано заданное количество символов, истёк тайм-аут (см. Serial.setTimeout()) или обнаружен символ-завершитель (в этом случае функция возвращает символы вплоть до последнего символа перед указанным завершителем). Сам завершитель в буфер не возвращается.

Serial.readBytesUntil() наследуется от служебного класса Stream.

Синтаксис

Используйте следующую функцию для чтения символов из последовательного порта и сохранения их в буфере до тех пор, пока не будет найден символ-завершитель:

Serial.readBytesUntil(character, buffer, length)

Параметры

Функция принимает следующие объекты и параметры:

  • Serial: объект последовательного порта. Список доступных последовательных портов для каждой платы см. на главной странице Serial.

  • character: символ, который нужно искать. Допустимые типы данных: char.

  • buffer: буфер для сохранения байтов. Допустимые типы данных: массив char или byte.

  • length: количество байт для чтения. Допустимые типы данных: int.

Возвращаемое значение

Функция возвращает количество символов, прочитанных в буфер. 0 означает, что параметр length <= 0, тайм-аут произошёл до получения других входных данных, либо символ-завершитель был обнаружен до получения других входных данных. Тип данных: size_t.

Пример кода

Следующий код читает данные до тех пор, пока не будет найден заданный символ, сохраняет их в буфере, а затем выводит:

char message[20];  // буфер для хранения сообщения

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';  // завершить строку нулевым символом

    Serial.print("You said: ");
    Serial.println(message);
  }
}

Примечания и предупреждения

Примечание

Символ-завершитель отбрасывается из буфера последовательного порта, если только количество прочитанных и скопированных в буфер символов не равно length.