Serial.println()
Serial.println() отправляет данные в последовательный порт как текст и автоматически добавляет \r\n в конце — каждое сообщение оказывается на отдельной строке в Serial Monitor.
Полная статья
Описание
Serial.println() работает так же, как Serial.print(), но после вывода значения автоматически дописывает два символа: возврат каретки \r и перевод строки \n. Вместе они образуют последовательность \r\n, которую Serial Monitor и большинство терминальных программ воспринимают как сигнал начать новую строку.
Это делает Serial.println() главным инструментом отладки: каждое значение или сообщение оказывается на отдельной строке, и вывод легко читать даже при быстром потоке данных.
Как и Serial.print(), функция преобразует данные в читаемый ASCII-текст перед отправкой:
Serial.println(78)выводит"78"и затем\r\nSerial.println(78, HEX)выводит"4E"и затем\r\nSerial.println(1.23456, 2)выводит"1.23"и затем\r\n
Если перевод строки в конце не нужен — например, когда вы собираете несколько значений в одну строку — используйте Serial.print().
Синтаксис
Serial.println(val)Serial.println(val, format)
Параметры
Serial— объект последовательного порта. На платах с несколькими аппаратными UART доступны такжеSerial,Serial1,Serial2и другие. Полный список портов для вашей платы смотрите на странице Serial.val— значение для вывода: строка, символ, целое число, число с плавающей точкой или другой поддерживаемый тип данных.format— необязательный параметр. Для целых чисел задаёт систему счисления:BIN(десятичная, по умолчанию),OCT(двоичная),DEC(шестнадцатеричная),HEX(восьмеричная). Для чисел с плавающей точкой задаёт количество знаков после десятичной точки — например,Serial.println(1.23456, 2)выведет"1.23".
Возвращает
Количество байтов, фактически записанных в выходной буфер. Тип данных: size_t. В большинстве скетчей это значение не используется, но его можно проверить, если нужно убедиться, что данные были приняты буфером.
Пример кода
/*
Аналоговый ввод: считывает значение с аналогового входа 0 и выводит его.
Создано 24 марта 2006 г.
Автор: Tom Igoe
*/
int analogValue = 0; // переменная для хранения аналогового значения
void setup() {
// открыть последовательный порт на скорости 9600 bps:
Serial.begin(9600);
}
void loop() {
// считать аналоговый вход на пине 0:
analogValue = analogRead(0);
// вывести в различных форматах:
Serial.println(analogValue); // вывести как десятичное число в ASCII-кодировке
Serial.println(analogValue, DEC); // вывести как десятичное число в ASCII-кодировке
Serial.println(analogValue, HEX); // вывести как шестнадцатеричное число в ASCII-кодировке
Serial.println(analogValue, OCT); // вывести как восьмеричное число в ASCII-кодировке
Serial.println(analogValue, BIN); // вывести как двоичное число в ASCII-кодировке
// задержка 10 миллисекунд перед следующим считыванием:
delay(10);
}
Где применяется
- Отладка в Serial Monitor — каждое сообщение выводится на отдельной строке и не сливается с предыдущим, что особенно удобно при выводе нескольких переменных в цикле.
- Вывод таблиц и списков — удобно печатать по одному значению на строку или завершать строку после нескольких вызовов
Serial.print(). - Простые текстовые протоколы — многие программы на стороне компьютера читают данные построчно и ждут
\r\nили\nкак признак конца сообщения.
Практические замечания
println()всегда добавляет именно два символа:\rи\n. Если принимающая сторона ожидает только\n, в большинстве случаев это не создаёт проблем, но при строгом разборе протокола стоит это учитывать.- Чтобы вывести данные без перевода строки — например, несколько значений в одну строку — используйте
Serial.print(), а в конце вызовитеSerial.println()без аргументов или с пустой строкой. - Как и
Serial.print(), функция может заблокировать выполнение скетча, если выходной буфер переполнен: данные отправляются медленнее, чем поступают. Это особенно заметно при высокой частоте вызовов вloop()и низкой скорости порта. - Если важно дождаться, пока все данные физически покинут буфер и уйдут в порт, вызовите Serial.flush() после серии выводов.