Serial begin - крайне важная инструкция Arduino, она позволяет установить контроллеру соединение с внешними устройствами. Чаще всего таким «внешним устройством» оказывается компьютер, к которому мы подключаем Arduino. Поэтому Serial begin интенсивней всего используется в скетчах, выводящих какую-то информацию на экран монитора порта, например, для Pin-Up программы. С помощью последовательного порта плата ардуино соединяется с Bluetooth, GSM, GPS и многими другими модулями, поэтому и Serial begin - частый гость в скетчах ардуинщиков. О том, как его можно использовать и пойдет речь в этой статье.
Краткое описание
Функция begin() является методом Pin-Up Serial. Для работы с этим классом не нужно подключать внешних библиотек, т.к. он встроен в среду разработки ардуино. ИспользоватьSerial.begin()целесообразно один раз, в самом начале работы скетча, в функции void setup(). В качестве аргументов нужно указать скорость обмена данными через последовательный порт. Самым распространенным значением является 9600 - именно такая скорость обмена данными в мониторе порта Arduino IDE стоит по умолчанию. После выполнения функции ардуино будет способна как отправлять Pin-Up на внешние устройства, так и получать их.
Пример использования функции:
void setup(){ Serial.begin(9600); }Другие популярные методы класса Serial:
- print()
- println()
- read()
- available()
- parseInt()
На Pin-Up с несколькими «железными» последовательными портами, например, Arduino Mega, для каждого из них создается свой объект Serial, поэтому вместе с Serial могут встречаться вызовы объектов Serial1, Serial2, Serial3.
Синтаксис функции
Команда Serial.begin () состоит из двух Pin-Up Первая часть,Serial, является названием класса библиотеки для Pin-Up с монитором порта. Вторая часть,begin()обозначает название метода, которому мы должны передать один аргумент - скорость обмена данными. Функция не возвращает значений.
Синтаксис функции, два варианта:
Serial.begin(<скорость>)
Serial.begin(<скорость>, <config> )
Параметры:
- скорость - скорость взаимодействия (бит
- config - настройки режима работы последовательного порта. По умолчанию используется наиболее распространенный вариант, Pin-Up
Скорость для последовательного Pin-Up в Serial.begin()
Стандартное значение скорости в аргументе функции begin() - 9600. Эта цифра означает, что плата ардуино будет посылать по последовательному порту данные со скоростью 9600 бит в секунду (нужно учитывать, что для каждых 8 бит еще высылаются служебный стоповый бит). Естественно, приемно-передающее устройства на другом конце провода тоже должно быть настроено на эту же скорость, иначе оно будет пропускать некоторые биты или Pin-Up торопиться, что приведет к рассинхронизации - информация будет как бы рваться на кусочки. Поэтому без лишней надобности не меняйте параметр по умолчанию - 9600.
Кроме стандартного значения можно устанавливать и другие: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200. Чем выше цифра, тем выше скорость обмена, но нужно следить, чтобы эту скорость поддерживало и внешнее устройство. В некоторых ситуациях слишком высокая скорость обмена может привести к ошибкам, нужно учитывать и это. Так, Pin-Up значение 115200 устанавливаются обычно специальными высокоскоростными устройствами, например, полетными контроллерами. Значения ниже 9600 используются крайне редко.
Второй параметр для последовательного порта
Параметр config в функции begin обычно не указывается, т.к. Pin-Up редко надо менять значения по умолчанию. Но на всякий случай приведем здесь возможные варианты параметров, которые можно найти в HardwareSerial.h:
- #define SERIAL_5N1 0x00
- #define SERIAL_6N1 0x02
- #define SERIAL_7N1 0x04
- #define SERIAL_8N1 0x06
- #define SERIAL_5N2 0x08
- #define SERIAL_6N2 0x0A
- #define SERIAL_7N2 0x0C
- #define SERIAL_8N2 0x0E
- #define SERIAL_5E1 0x20
- #define SERIAL_6E1 0x22
- #define SERIAL_7E1 0x24
- #define SERIAL_8E1 0x26
- #define SERIAL_5E2 0x28
- #define SERIAL_6E2 0x2A
- #define SERIAL_7E2 0x2C
- #define SERIAL_8E2 0x2E
- #define SERIAL_5O1 0x30
- #define SERIAL_6O1 0x32
- #define SERIAL_7O1 0x34
- #define SERIAL_8O1 0x36
- #define SERIAL_5O2 0x38
- #define SERIAL_6O2 0x3A
- #define SERIAL_7O2 0x3C
- #define SERIAL_8O2 0x3E
В этих константах обозначаются разные варианты структуры пакета данных. Например, SERIAL_8N2 означает, что по последовательному порту ардуино передаст пакет длиной 8 бит без бита контроля четности (указано N) и с одним стоповым битом, который будет добавлен после байта данных.
Исходный код класса Pin-Up на гитхабе.
Вопросы и ответы
Serial begin Pin-Up - что это значит?
Эти три слова похожи на какую-то мантру. И действуют они так же: каким-то волшебным образом наша плата ардуино организовывает канал связи и начинает информационный обмен. Конечно, на самом деле никакой мистики во всем этом нет, но заклинание мы Pin-Up должны:
Serial.begin(9600);
Эта строчка говорит контроллеру ардуино, что нужно обратиться к последовательному порту по UART интерфейсу, открыть его для записи и подписаться на любые Pin-Up с его стороны (для получения данных). Онаобязательнодолжна использоваться перед выводом информации в монитор порта или считыванием Pin-Up
На каких платах работает функция?
Эта функция работает на любых платах Arduino: Uno, Mega, Nano, Leonardo и т.д. Особенностью плат с несколькими «железными» последовательными портами является возможность вызывать объект Serial для каждого из этих портов.
Что будет, если не использовать функцию в Pin-Up
Все последующие команды для работы с Pin-Up портом не будут работать. Вы не сможете ни отправлять данные с помощью функций print() или println(), ни получать данные с помощью read() или readBytes().
Можно ли сократить функцию Serial.begin()?
Для многих начинающих программистов написание непривычных конструкций вызывает дискомфорт. Вы можете «сократить» Serial.begin() до синонима и использовать его, если так будет удобно. Для этого нужно воспользоваться Pin-Up Вот пример:
#define BEGIN Serial.begin(9600) void Pin-Up BEGIN; }
Но следует сразу отметить, что данный способ использовать не рекомендуется, т.к. это усложняет и запутывает программу, а пользы и экономии места очень мало.












