Библиотека Serial — это стандартная библиотека, которая подключается в скетчи автоматически. Она используется для передачи данных через последовательный порт Arduino. В большинстве плат ардуино доступен 1 интерфейс Serial. Последовательный порт работает с двумя цифровыми пинами Ардуино 0-ой (RX) и 1-ый (TX). В Arduino Mega таких интерфейсов 3. Для доступа к интерфейсу связи необходимо использовать ключевой слово Serial (Serial1 и Serial2 для Arduino Mega).
Теперь рассмотрим доступные функции библиотеки Serial:
if(Serial)
Условие с проверкой готовности порта к работе. Используется такая конструкция довольно редко, потому что обычно интерфейс доступен.
if(!Serial) {
/* Блок кода, которой будет исполняться если Serial интерфейс не доступен */
}
available()
Проверяет число байтов доступных для считывания. Данная функция показывает какое количество данных уже пришло и хранится в буфере обмена. Размер буфера последовательного порта 64 байта.
Синтаксис
Serial.available()
Параметры
нет
Возвращаемые значения
Число байт доступных для чтения
void setup() {
Serial.begin(9600); /* установка соединения на скорости 9600 бод */
}
void loop() {
while(Serial.available() < 1) { /* Ждем пока не придут данные */
delay(10);
}
}
availableForWrite()
Проверяет число байтов доступных для записи в буфер обмена, без блокировки функции записи.
Синтаксис
Serial.availableForWrite()
Параметры
Нет
Возвращаемые значения
Число байт доступных для записи
void setup() {
Serial.begin(9600); /* установка соединения на скорости 9600 бод */
}
void loop() {
if(Serial.availableForWrite() < 1) { /* Ждем пока не придут данные */
Serial.flush(); /* Очищаем буфер обмена */
}
}
begin()
Данная функция устанавливает соединение на определенной скорости.
Синтаксис
Serial.begin(speed, config)
Параметры
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
Возвращаемые значения
Нет
void setup() {
Serial.begin(9600); // Установка соединения на скорости передачи данных на 9600 бит/сек
}
end()
Отключает соединение через последовательный порт и освобождает пины RX и TX.
Синтаксис
Serial.end();
Параметры
Нет
Возвращаемые значения
Нет
find()
Считывает данные из буфера обмена до тех пор пока не найдет заданную строку.
Синтаксис
Serial.find(needle)
Параметры
needle — Обязательный параметр. Строка которую нужно найти
Возвращаемые значения
true — Если строка найдена.
false — Если строка не найдена.
findUntil()
Считывает данные из буфера обмена до тех пор пока не найдет заданную строку или терминальную строку.
Синтаксис
Serial.findUntil(needle, terminal);
Параметры
needle — Обязательный параметр. Строка которую нужно найти
terminal — Обязательный параметр. Терминальная строка которую нужно найти
Возвращаемые значения
true — Если строка найдена.
false — Если строка не найдена.
flush()
Очищает буфер обмена последовательного порта
Синтаксис
Serial.flush();
Параметры
Нет
Возвращаемые значения
Нет
parseFloat()
Возвращает первое найденное в буфере обмена число с плавающей точкой. Все остальные символы игнорируются.
Синтаксис
Serial.parseFloat();
Параметры
Нет
Возвращаемые значения
Число с плавающей точкой (float)
parseInt()
Возвращает первое найденное в буфере обмена целое число. Все остальные символы игнорируются.
Синтаксис
Serial.parseInt(skipChar);
Параметры
skipChar — необязательный параметр. Символ который будет пропускаться при поиске
Возвращаемые значения
Целое число (long) или 0, если не найдено цифр.
void setup() {
Serial.begin(9600); // Установка соединения на скорости передачи данных на 9600 бит/сек
}
void loop() {
long number = Serial.parseInt(" "); // Корректно обработает число с пробелами между цифрами (1 000 000)
Serial.prinln(number); // 1000000
}
peek()
Возвращает первый байт данных из буфера.
Синтаксис
Serial.peek();
Параметры
Нет
Возвращаемые значения
Первый байт входящих последовательных данных (int). Если данных нет то вернет «-1»
print()
Функция отправляет данные в последовательный порт в виде ASCII-текста.
Синтаксис
Serial.print(val, format);
Параметры
val — обязательный параметр. Данные, которые необходимо отправить.
format — Необязательный параметр. Форматирует отправляемые данные. Может принимать следующие значения: BIN — Двоичный формат. OCT — Восьмеричный формат. DEC — Десятичный формат HEX — Шестнадцатиричный формат. 0 — Округление числа до целых. 2 — Округление число до сотых.
Возвращаемые значения
Количество записанных байтов (long)
void setup() {
Serial.begin(9600); // Установка соединения на скорости передачи данных на 9600 бит/сек
}
void loop() {
Serial.print(78); // 78
Serial.print(78, BIN); // 1001110
Serial.print(78, HEX); // 4E
Serial.print(3,1415926535, 0); // 3
Serial.print(3,1415926535, 2); // 3.14
Serial.print(3,1415926535, 4); // 3.1416
}
println()
Отправляет данные в виде ASCII-текста в последовательный порт с символом конца строки (\r) и символом новой строки (\n)
Синтаксис
Serial.printIn(val, format)
Параметры
val — обязательный параметр. Данные, которые необходимо отправить.
format — Необязательный параметр. Форматирует отправляемые данные. Может принимать следующие значения: BIN — Двоичный формат. OCT — Восьмеричный формат. DEC — Десятичный формат HEX — Шестнадцатиричный формат. 0 — Округление числа до целых. 2 — Округление число до сотых.
Возвращаемые значения
Количество записанных байтов (long)
read()
Считывает данные из последовательного порта.
Синтаксис
Serial.read()
Параметры
Нет
Возвращаемые значения
Первый доступный байт (int).
void setup() {
Serial.begin(9600); // Установка соединения на скорости передачи данных на 9600 бит/сек
}
void loop() {
if(Serial.availeble() > 0) {
int incoming = Serial.read(); // Считываем первый входящий байт
}
}
readBytes()
Считывает символы из последовательного порта в буфер. Завершает свою работу, если сосчитает данные заданной длины или если выйдет время. Время указывается при помощи функции serial.setTimeout().
Возвращаемое значение — количество символов, помещенных в буфер. Если функция вернет значение «0», это значит, что нужных данных найдено не было.
Синтаксис
Serial.readBytes(buffer, length);
Параметры
buffer — буфер, в который будут сохраняться входящие байты (char[] или byte[])
length — количество считанных байтов (int)
Возвращаемые значения
Байт
readBytesUntil()
Считывает символы из буфера последовательного порта в массив. Завершает свою работу, если обнаружит терминальный символ, если сосчитает данные заданной длины или если выйдет время. Время указывается с помощью функции Serial.setTimeout().
Синтаксис
Serial.readBytesUntil(character, buffer, length);
Параметры
character — символ, который нужно найти (char)
buffer — буфер, в который будут сохранены входящие байты (char[] или byte[])
length — количество байтов, которые нужно сосчитать (int)
Возвращаемые значения
Байт.
readString()
Считывает данные из буфера последовательного порта в строку. Завершает свою работу, если выйдет время. Время указывается в функции Serial.setTimeout().
Синтаксис
Serial.readString()
Параметры
Нет.
Возвращаемые значения
Строка с данными, считанными из буфера последовательного порта.
readStringUntil()
Считывает символы из буфера последовательного порта в строку. Завершает свою работу, если наткнется на терминальный символ или если выйдет время. Время указывается в функции Serial.setTimeout().
Синтаксис
Serial.readStringUntil(terminalChar);
Параметры
terminalChar— искомый символ (char)
Возвращаемые значения
Строка, считанная из буфера последовательного порта (до символа, завершающего работу функции).
setTimeout()
Устанавливает время (в миллисекундах), в течение которого функции Serial.readBytesUntil(), Serial.readBytes(), Serial.parseInt() и Serial.parseFloat() должны будут ждать данных, входящих через последовательный порт.
Синтаксис
Serial.setTimeout(time);
Параметры
time — время ожидания в миллисекундах (long).
Возвращаемые значения
Нет
write()
Передает через последовательный порт данные в двоичном виде. Данные передаются как байт или как серия байтов. Если вам нужно отправить символы, представляющие цифры какого-либо числа, используйте функцию print().
Синтаксис
Serial.write(val, len)
Параметры
val — значение, строка или буфер для отправки.
len — размер буфера
Возвращаемые значения
Байт или количество отправленных байтов
serialEvent
Автоматически вызывается, когда есть доступные данные. Для захвата этих данных нужно воспользоваться функцией Serial.read().
Синтаксис
void serialEvent(){
// statements
}
Параметры
statements — любые корректные функции, позволяющие делать что-то с поступившими данными.