Serial.print()
Description
Prints data to the serial port as human-readable ASCII text. This command can take many forms. Numbers are printed using an ASCII character for each digit. Floats are similarly printed as ASCII digits, defaulting to two decimal places. Bytes are sent as a single character. Characters and strings are sent as is. For example-
Serial.print(1.23456) gives «1.23»
Serial.print(«Hello world.») gives «Hello world.»
An optional second parameter specifies the base (format) to use; permitted values are BIN(binary, or base 2) , OCT(octal, or base 8) , DEC(decimal, or base 10) , HEX(hexadecimal, or base 16) . For floating point numbers, this parameter specifies the number of decimal places to use. For example-
Serial.print(78, BIN) gives «1001110»
Serial.print(78, OCT) gives «116»
Serial.print(78, DEC) gives «78»
Serial.print(78, HEX) gives «4E»
Serial.print(1.23456, 0) gives «1»
Serial.print(1.23456, 2) gives «1.23»
Serial.print(1.23456, 4) gives «1.2346»
You can pass flash-memory based strings to Serial.print() by wrapping them with F(). For example:
To send data without conversion to its representation as characters, use Serial.write().
Syntax
Serial.print(val)
Serial.print(val, format)
Parameters
Serial : serial port object. See the list of available serial ports for each board on the Serial main page.
val : the value to print. Allowed data types: any data type.
Returns
print() returns the number of bytes written, though reading that number is optional. Data type: size_t .
Монитор порта, отладка
Как мы с вами знаем из урока “Что умеет микроконтроллер“, у многих микроконтроллеров есть интерфейс UART, позволяющий передавать и принимать различные данные. У интерфейса есть два вывода на плате – пины TX и RX. На большинстве Arduino-плат к этим пинам подключен USB-UART преобразователь (расположен на плате), при помощи которого плата может определяться компьютером при подключении USB кабеля и обмениваться с ним информацией. На компьютере создаётся виртуальный COM порт (последовательный порт), к которому можно подключиться при помощи программ-терминалов и принимать-отправлять текстовые данные. Таким же образом кстати работают некоторые принтеры и большинство станков с ЧПУ.
В самой Arduino IDE есть встроенная “консоль” – монитор порта, кнопка с иконкой лупы в правом верхнем углу программы. Нажав на эту кнопку мы откроем сам монитор порта, в котором будут настройки:
Если с отправкой, автопрокруткой, отметками времени и кнопкой очистить вывод всё и так понятно, то конец строки и скорость мы рассмотрим подробнее:
- Конец строки: тут есть несколько вариантов на выбор, чуть позже вы поймёте, на что они влияют. Лучше поставить нет конца строки, так как это позволит избежать непонятных ошибок на первых этапах знакомства с платформой.
- Нет конца строки – никаких дополнительных символов в конце введённых символов после нажатия на кнопку отправка или клавишу Enter.
- NL – символ переноса строки в конце отправленных данных.
- CR – символ возврата каретки в конце отправленных данных.
- NL+CR – и то и то.
- Скорость – тут на выбор нам даётся целый список скоростей, т.к. общение по Serial может осуществляться на разных скоростях, измеряемых в бод (baud), и если скорости приёма и отправки не совпадают – данные будут получены некорректно. По умолчанию скорость стоит 9600, её и оставим.
Объект Serial
Начнём знакомство с одним из самых полезных инструментов Arduino-разработчика – Serial, который идёт в комплекте со стандартными библиотеками. Serial позволяет как просто принимать и отправлять данные через последовательный порт, так и наследует из класса Stream кучу интересных возможностей и фишек, давайте сразу их все рассмотрим, а потом перейдём к конкретным примерам.
Запустить связь по Serial на скорости speed (измеряется в baud, бит в секунду). Скорость можно поставить любую, но есть несколько “стандартных” значений. Список скоростей для монитора порта Arduino IDE:
- 300
- 1200
- 2400
- 4800
- 9600 чаще всего используется, можно назвать стандартной
- 19200
- 38400
- 57600
- 115200 тоже часто встречается
- 230400
- 250000
- 500000
- 1000000
- 2000000 – максимальная скорость, не работает на некоторых китайских платах
Serial.print()
Description
Prints data to the serial port as human-readable ASCII text. This command can take many forms. Numbers are printed using an ASCII character for each digit. Floats are similarly printed as ASCII digits, defaulting to two decimal places. Bytes are sent as a single character. Characters and strings are sent as is. For example-
Serial.print(78) gives «78»
Serial.print(1.23456) gives «1.23»
Serial.print(‘N’) gives «N»
Serial.print(«Hello world.») gives «Hello world.»
An optional second parameter specifies the base (format) to use; permitted values are BIN(binary, or base 2) , OCT(octal, or base 8) , DEC(decimal, or base 10) , HEX(hexadecimal, or base 16) . For floating point numbers, this parameter specifies the number of decimal places to use. For example-
Serial.print(78, BIN) gives «1001110»
Serial.print(78, OCT) gives «116»
Serial.print(78, DEC) gives «78»
Serial.print(78, HEX) gives «4E»
Serial.print(1.23456, 0) gives «1»
Serial.print(1.23456, 2) gives «1.23»
Serial.print(1.23456, 4) gives «1.2346»
You can pass flash-memory based strings to Serial.print() by wrapping them with F(). For example:
To send data without conversion to its representation as characters, use Serial.write().
Syntax
Serial.print(val)
Serial.print(val, format)
Parameters
Serial : serial port object. See the list of available serial ports for each board on the Serial main page.
val : the value to print — any data type
Returns
size_t : print() returns the number of bytes written, though reading that number is optional.
Arduino
Serial
Библиотека Serial содержит набор функции для работы с последовательным портом Arduino.
Любая плата Arduino содержит один или несколько последовательных портов, служащих для связи с компьютером или с другими устройствами, которые также поддерживают последовательный интерфейс обмена данными.
В таблице ниже представлены данные по последовательным портам основных плат Arduino:
Плата | Пины сериального порта 1 | Пины сериального порта 2 | Пины сериального порта 3 | Пины сериального порта 4 |
---|---|---|---|---|
Uno | 0(RX), 1(TX) | |||
Nano | 0(RX), 1(TX) | |||
Mini | 0(RX), 1(TX) | |||
Mega | 0(RX), 1(TX) | 19(RX), 18(TX) | 17(RX), 16(TX) | 15(RX), 14(TX) |
Due | 0(RX), 1(TX) | 19(RX), 18(TX) | 17(RX), 16(TX) | 15(RX), 14(TX) |
TX — пин передачи данных, RX — пин получения данных.
Для соединения двух устройств, необходимо подключить пин TX первого устройство к пину RX второго, а пин RX первого — к пину TX второго соответственно.
Для связи с компьютером используется USB порт на Arduino, однако нужно помнить, что и в этом случае при использовании функций Serial нельзя задействовать пины RX и TX для каких-либо других целей.
Среду разработки Arduino IDE и PlatformIO имеют встроенный монитор порта Serial , главное — не забыть выставить одинаковую скорость на Arduino через функцию begin() и в IDE.
Функции библиотеки Serial
Функция Serial.begin()
Описание
Инициирует последовательное соединение, а также задает скорость передачи данных. Скорость измеряется в бит/с (бод). Для обмена данных с компьютером через USB используются значения из следующего списка: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 и 115200. При подключении двух устройств через пины RX и TX, могут использоваться любые другие значения.
Синтаксис
Serial.begin(speed)
Serial.begin(speed, config)
Параметры
speed — скорость передачи данных
config — необязательный параметр, устанавливает данные, четность и стоповые биты
Возвращаемое значение
Пример
Функция Serial.end()
Описание
Закрывает последовательное соединение, позволяя использовать пины RX и TX для обычного использования.
Чтобы снова включить последовательное соединение, используйте функцию begin() .
Arduino библиотека Serial
Библиотека Serial — это стандартная библиотека, которая подключается в скетчи автоматически. Она используется для передачи данных через последовательный порт Arduino. В большинстве плат ардуино доступен 1 интерфейс Serial. Последовательный порт работает с двумя цифровыми пинами Ардуино 0-ой (RX) и 1-ый (TX). В Arduino Mega таких интерфейсов 3. Для доступа к интерфейсу связи необходимо использовать ключевой слово Serial (Serial1 и Serial2 для Arduino Mega).
Теперь рассмотрим доступные функции библиотеки Serial:
if(Serial)
Условие с проверкой готовности порта к работе. Используется такая конструкция довольно редко, потому что обычно интерфейс доступен.
available()
Проверяет число байтов доступных для считывания. Данная функция показывает какое количество данных уже пришло и хранится в буфере обмена. Размер буфера последовательного порта 64 байта.
Синтаксис
Параметры
Возвращаемые значения
Число байт доступных для чтения
availableForWrite()
Проверяет число байтов доступных для записи в буфер обмена, без блокировки функции записи.
Синтаксис
Параметры
Возвращаемые значения
Число байт доступных для записи
begin()
Данная функция устанавливает соединение на определенной скорости.
Синтаксис
Параметры
speed — Обязательный параметр. Скорость бит в секунду (бод). Доступные значения: 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 или 115200
config — Необязательный параметр. Задает биты данных, биты четности и стоп-биты. Доступные значения: SERIAL_5N1, SERIAL_6N1, SERIAL_7N1, SERIAL_8N1 (это значение задано по умолчанию), SERIAL_5N2, SERIAL_6N2, SERIAL_7N2, SERIAL_8N2, SERIAL_5E1, SERIAL_6E1, SERIAL_7E1, SERIAL_8E1, SERIAL_5E2, SERIAL_6E2, SERIAL_7E2, SERIAL_8E2, SERIAL_5O1, SERIAL_6O1, SERIAL_7O1, SERIAL_8O1, SERIAL_5O2, SERIAL_6O2, SERIAL_7O2, SERIAL_8O2
Возвращаемые значения
Отключает соединение через последовательный порт и освобождает пины RX и TX.
Синтаксис
Параметры
Возвращаемые значения
Считывает данные из буфера обмена до тех пор пока не найдет заданную строку.
Синтаксис
Параметры
needle — Обязательный параметр. Строка которую нужно найти
Возвращаемые значения
true — Если строка найдена.
false — Если строка не найдена.
findUntil()
Считывает данные из буфера обмена до тех пор пока не найдет заданную строку или терминальную строку.
Синтаксис
Параметры
needle — Обязательный параметр. Строка которую нужно найти
terminal — Обязательный параметр. Терминальная строка которую нужно найти
Возвращаемые значения
true — Если строка найдена.
false — Если строка не найдена.
flush()
Очищает буфер обмена последовательного порта
Синтаксис
Параметры
Возвращаемые значения
parseFloat()
Возвращает первое найденное в буфере обмена число с плавающей точкой. Все остальные символы игнорируются.
Синтаксис
Параметры
Возвращаемые значения
Число с плавающей точкой (float)
parseInt()
Возвращает первое найденное в буфере обмена целое число. Все остальные символы игнорируются.
Синтаксис
Параметры
skipChar — необязательный параметр. Символ который будет пропускаться при поиске
Возвращаемые значения
Целое число (long) или 0, если не найдено цифр.
Возвращает первый байт данных из буфера.
Синтаксис
Параметры
Возвращаемые значения
Первый байт входящих последовательных данных (int). Если данных нет то вернет «-1»
print()
Функция отправляет данные в последовательный порт в виде ASCII-текста.
Синтаксис
Параметры
val — обязательный параметр. Данные, которые необходимо отправить.
format — Необязательный параметр. Форматирует отправляемые данные. Может принимать следующие значения: BIN — Двоичный формат. OCT — Восьмеричный формат. DEC — Десятичный формат HEX — Шестнадцатиричный формат. 0 — Округление числа до целых. 2 — Округление число до сотых.
Возвращаемые значения
Количество записанных байтов (long)
println()
Отправляет данные в виде ASCII-текста в последовательный порт с символом конца строки (\r) и символом новой строки (\n)
Синтаксис
Параметры
val — обязательный параметр. Данные, которые необходимо отправить.
format — Необязательный параметр. Форматирует отправляемые данные. Может принимать следующие значения: BIN — Двоичный формат. OCT — Восьмеричный формат. DEC — Десятичный формат HEX — Шестнадцатиричный формат. 0 — Округление числа до целых. 2 — Округление число до сотых.
Возвращаемые значения
Количество записанных байтов (long)
Считывает данные из последовательного порта.
Синтаксис
Параметры
Возвращаемые значения
Первый доступный байт (int).
readBytes()
Считывает символы из последовательного порта в буфер. Завершает свою работу, если сосчитает данные заданной длины или если выйдет время. Время указывается при помощи функции serial.setTimeout().
Возвращаемое значение — количество символов, помещенных в буфер. Если функция вернет значение «0», это значит, что нужных данных найдено не было.
Синтаксис
Параметры
buffer — буфер, в который будут сохраняться входящие байты (char[] или byte[])
length — количество считанных байтов (int)
Возвращаемые значения
readBytesUntil()
Считывает символы из буфера последовательного порта в массив. Завершает свою работу, если обнаружит терминальный символ, если сосчитает данные заданной длины или если выйдет время. Время указывается с помощью функции Serial.setTimeout().
Синтаксис
Параметры
character — символ, который нужно найти (char)
buffer — буфер, в который будут сохранены входящие байты (char[] или byte[])
length — количество байтов, которые нужно сосчитать (int)
Возвращаемые значения
readString()
Считывает данные из буфера последовательного порта в строку. Завершает свою работу, если выйдет время. Время указывается в функции Serial.setTimeout().
Синтаксис
Параметры
Возвращаемые значения
Строка с данными, считанными из буфера последовательного порта.
readStringUntil()
Считывает символы из буфера последовательного порта в строку. Завершает свою работу, если наткнется на терминальный символ или если выйдет время. Время указывается в функции Serial.setTimeout().
Синтаксис
Параметры
terminalChar— искомый символ (char)
Возвращаемые значения
Строка, считанная из буфера последовательного порта (до символа, завершающего работу функции).
setTimeout()
Устанавливает время (в миллисекундах), в течение которого функции Serial.readBytesUntil(), Serial.readBytes(), Serial.parseInt() и Serial.parseFloat() должны будут ждать данных, входящих через последовательный порт.
Синтаксис
Параметры
time — время ожидания в миллисекундах (long).
Возвращаемые значения
write()
Передает через последовательный порт данные в двоичном виде. Данные передаются как байт или как серия байтов. Если вам нужно отправить символы, представляющие цифры какого-либо числа, используйте функцию print().
Синтаксис
Параметры
val — значение, строка или буфер для отправки.
len — размер буфера
Возвращаемые значения
Байт или количество отправленных байтов
serialEvent
Автоматически вызывается, когда есть доступные данные. Для захвата этих данных нужно воспользоваться функцией Serial.read().
Синтаксис
Параметры
statements — любые корректные функции, позволяющие делать что-то с поступившими данными.
Железо
Это расширенный стартовый набор. В комплект входит Arduino Mega R3, макетные платы, множество датчиков, управляемые механизмы и необходимые радиоэлектронные компоненты. Полный список.
Arduino Uno — плата на базе микроконтроллера ATmega328P с частотой 16 МГц. На плате есть все необходимое для удобной и быстрой работы.
Макетная плата на 830 точек и ничего лишнего.