Arduino библиотека Serial

Библиотека 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 — любые корректные функции, позволяющие делать что-то с поступившими данными.

Ардуино