Ардуино значение на порту

Содержание

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() .

Источник

Serial Monitor. Общаемся с компьютером

Для общения между платой Arduino и компьютером или другим устройством в контроллере используется интерфейс UART или USART, который в сочетании со встроенным в UNO USB-to-UART конвертером, позволит установить двунаправленую связь с компьютером через виртуальный последовательный порт. У некоторых моделей Arduino может быть несколько портов. Порт соединяется через цифровой пин 0 (RX) и 1 (TX) при подключении к компьютеру через USB, поэтому не используйте пины 0 и 1 для ввода/вывода.

Раньше на старых компьютерах были COM-порты, сейчас они создаются виртуально при помощи микросхемы FTDI, когда мы подключаем плату к компьютеру через USB.

Вам часто придётся использовать общение между устройствами для обмена информацией. Можно как посылать сигнал с компьютера, например, с клавиатуры, так и принимать сигналы с платы. Это полезно, чтобы узнать, что вообще происходит с сигналом из нужного вывода платы.

В Arduino IDE есть специальный значок с изображением лупы, который запускает Serial Monitor (монитор порта).

Для корректной работы с портом требуется выполнение двух условий: выбрать правильный COM-порт, выбрать скорость работы в скетче, которая должна совпадать со скоростью, выбранной в мониторе порта.

Для общения используется класс Serial. В методе setup() мы открываем порт для общения функцией Serial.begin() с указанием скорости в бодах (baud). Бод — это количество изменений сигнала в секунду. В нашем случае сигналы могут быть только двоичными, так что скорость в бодах соответствует скорости в битах в секунду. Можно использовать любую скорость, главное чтобы на приёмной и передающей сторонах они были одинаковыми. Доступные скорости можно посмотреть в настройках порта. Значение 9600 является стандартным и его можно не менять (9600 бод — 960 символов — один стартовый бит, восемь бит на сам символ и конечный бит). Если установить неправильную скорость, то вместо данных получим «мусор» — данные, которые нельзя обработать. Для обмена данными между другими компонентами скорость может быть и выше, например между платой и Bluetooth-модулем.

На платах Arduino Mega и Arduino Due доступны также Serial1, Serial2, Serial3.

Чтобы отправить сообщение в порт, используются методы print() (символы идут подряд) или println() (с переводом на новую строку).

Давайте выведем какое-нибудь сообщение. Это можно сделать в методе setup(), так как нам не нужно повторять одну и ту же фразу бесконечно. Метод loop() оставляем пустым.

Если посылаем строку, то обрамляем её кавычками. Если число, то кавычки не используем. Изменим функцию setup().

Можно заменить строки и числа на переменные. Перепишем пример.

Немного о числах. При работе с дробными числами, можно указать число знаков после запятой.

Работа с массивами и строками

Разберём пример отправки строк в случайном порядке. Любая строка уже является массивом символов. Поэтому вместо типа String, можно использовать массив char[]. Для примера создадим массив из четырёх имён и будем выводить их в случайном порядке через разные промежутки времени, используя функцию random().

Приём данных

Выводить данные в порт просто. А вот принимать данные с компьютера и других источников сложнее. При отправлении данных, они складываются в буфер, ожидая, когда плата их прочитает. Объём буфера составляет 64 байта. Чтобы постоянно не читать пустой буфер, есть специальная функция проверки буфера Serial.available(). Она возвращает число байт, которые лежат в буфере. Обычно в коде создают условие проверки — если в буфере больше 0 байт, то выполняем какие-то команды.

Для демонстрации создадим странный пример — создадим переменную, присвоим ей данные через Serial.read() и попросим её прислать полученные данные через Serial.print(). Получится круговорот данных или эхо.

Проверяем на числах. Отправляем число 9, а получаем 57. Если вы получаете две строки с числами 57 и 10, то в нижней части окна выберите настройку No line ending вместо Newline.

Попробуем также отправить букву. Опять вместо t возвращается 116. Ерунда какая-то. Всё просто, функция read() работает с символьными значениями и мы видим код символа из стандартной таблицы символов ASCII.

Чтобы решить проблему, нужно изменить тип данных на char.

Вроде проблема решена. Мы можем принимать отдельные цифры и буквы. Но буквы только английские, а числа только однозначные.

Если мы планируем работать только с однозначными числами, то можно написать такой код.

Решение какое-то половинчатое. А как быть с большими числами или словами?

Если отправить двузначное число 23, то ответ разбивается на части — 2 и 3. Получается, что переменная получит последнее число 3 (промежуточные значения перезаписываются). Чтобы обработать всё число, нужно использовать метод parseInt().

Теперь вы можете вводить любые числа. Но, наверное, вы заметите теперь небольшую задержку в ответах. Метод внутри себя перемалывает данные. Кстати, вы можете использовать и обычные символы. Если набор символов состоит только из букв, то вернётся 0. Если будут попадаться и цифры, то будут возвращаться цифры. Попробуйте комбинировать различные сочетания цифр и букв, чтобы понять, как будут обрабатываться данные.

Управление светодиодом с клавиатуры

Напишем пример управления встроенным светодиодом с клавиатуры. Если нажата клавиша 1, то светодиод должен загореться, при нажатии клавиши 0 выключим светодиод.

Часть кода нам уже знакома — мы используем встроенный светодиод под номером 13.

Сигнал от компьютера поступает в виде байта. Создаём новую переменную incomingByte для этих целей.

Последовательный порт включается командой begin() с указанием скорости.

Если с компьютера поступает сигнал, то функция available() вернёт количество байт, доступное для чтения. Таким образом, мы просто убеждаемся, что какой-то сигнал пришёл (больше нуля).

После первой проверки мы проверяем введённый символ, который может быть представлен и как байт. Если символ равен единице, то включаем светодиод, как мы делали раньше. Если символ равен 0, то выключаем.

Как это выглядит на практике. Заливаем скетч и запускаем Serial Monitor (Ctrl+Shift+M). В окне Serial Monitor наверху есть текстовое поле. Вводим в него числа 1 или 0 и нажимаем кнопку Send. Можно также нажать клавишу Enter для быстрого ввода.

Для общего развития в скетч добавлены также две строчки кода, определяющие код нажатой клавиши. Таким образом вы можете узнать код для клавиш 0 и 1. Вы также можете нажимать и на другие клавиши, они не повлияют на светодиод, но вы увидите коды клавиш.

Чуть более сложный пример, когда строка задана в виде массива и символы выводятся по очереди.

Функция Serial.end() закрывает последовательное соединение, порты RX и TX освобождаются и могут быть использованы для ввода/вывода.

В различных уроках вы будете принимать сигналы от платы Arduino. Это полезно, например, для отладки приложения, когда вы выводите сообщения и по ним ориентируетесь, какая часть программа работает, а какая — нет. Способность общения между Arduino и компьютером очень важна. Вы можете принимать сигналы не только в Arduino IDE, но и в других приложениях на компьютере. Например, в связке с Arduino часто используют приложение Processing, в котором рисуют графики поступаемых сигналов.

Если вы больше не нуждаетесь в получении данных, то закрывайте окно Serial Monitor.

Также существует библиотека SoftwareSerial. Она позволяет осуществить последовательную передачу данных через другие цифровые контакты Arduino.

Другие варианты

Чтение данных из последовательного порта возможно другими способами. Ищите расширения, например, Arduino Chrome Serial Monitor. На видео можно посмотреть, как создать расширение самостоятельно.

На C# также можно написать приложение, которое будет уметь считывать данные.

Processing также умеет работать с последовательным портом.

Дополнительное чтение

ASCIITable — распечатываем таблицу символов ASCII в разных форматах

Источник

Serial

Description

Used for communication between the Arduino board and a computer or other devices. All Arduino boards have at least one serial port (also known as a UART or USART), and some have several.

Leonardo, Micro, YГєn

Connected to USB

Connected to NINA

SerialUSB (Native USB Port only)

Connected to Programming Port

SerialUSB (Native USB Port only)

On Uno, Nano, Mini, and Mega, pins 0 and 1 are used for communication with the computer. Connecting anything to these pins can interfere with that communication, including causing failed uploads to the board.

You can use the Arduino environment’s built-in serial monitor to communicate with an Arduino board. Click the serial monitor button in the toolbar and select the same baud rate used in the call to begin() .

Serial communication on pins TX/RX uses TTL logic levels (5V or 3.3V depending on the board). Don’t connect these pins directly to an RS232 serial port; they operate at +/- 12V and can damage your Arduino board.

To use these extra serial ports to communicate with your personal computer, you will need an additional USB-to-serial adaptor, as they are not connected to the Mega’s USB-to-serial adaptor. To use them to communicate with an external TTL serial device, connect the TX pin to your device’s RX pin, the RX to your device’s TX pin, and the ground of your Mega to your device’s ground.

Источник

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 точек и ничего лишнего.

Источник

Adblock
detector
Board USB CDC name Serial pins Serial1 pins Serial2 pins Serial3 pins