Добавить в корзинуПозвонить
Найти в Дзене

Знакомоство с монитором COM порта на Arduino!

В этой статье я расскажу о канале связи с Arduino - COM порте. Если вы не знакомы с программной частью Arduino, то можете почитать статьи на моём канале, в них я рассказывал о подключении, программировании, переменных и ещё много о чём, что может понадобится новичку. COM-порт (communications port) — это аппаратный интерфейс для последовательной передачи данных между компьютером и внешними устройствами. Также его называют последовательным портом.(Ответ Aлисы AI) Своими словами могу сказать, что это окно, через которую мы на ПК получаем ответ от Arduino, например: мы хотим, чтобы обратно нам выводилась какая-то надпись или значение, Arduino будет возвращать и показывать нам его в COM-порте. На моём канале уже есть статья, где я, для проверки работоспособности платы, просил открыть монитор порта, но не рассказывал что это. Для работы с COM-портом существует встроенная библиотека, которая имеет объект Serial, который мы вызываем в блоке setup, чтобы порт открылся один раз при запуске
Оглавление

В этой статье я расскажу о канале связи с Arduino - COM порте. Если вы не знакомы с программной частью Arduino, то можете почитать статьи на моём канале, в них я рассказывал о подключении, программировании, переменных и ещё много о чём, что может понадобится новичку.

COM-порт

COM-порт (communications port) — это аппаратный интерфейс для последовательной передачи данных между компьютером и внешними устройствами. Также его называют последовательным портом.(Ответ Aлисы AI)

Своими словами могу сказать, что это окно, через которую мы на ПК получаем ответ от Arduino, например: мы хотим, чтобы обратно нам выводилась какая-то надпись или значение, Arduino будет возвращать и показывать нам его в COM-порте.

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

Чтобы открыть монитор порта необходимо нажать на значок лупы в правом верхнем углы программы Arduino IDE
Чтобы открыть монитор порта необходимо нажать на значок лупы в правом верхнем углы программы Arduino IDE

Работа с COM-портом

Для работы с COM-портом существует встроенная библиотека, которая имеет объект Serial, который мы вызываем в блоке setup, чтобы порт открылся один раз при запуске Arduino. К нему мы применяем метод begin(), который устанавливает скорость связи с Arduino, которая измеряется в бодах.

-2

Бод — это скорость изменения состояния сигнала в канале связи, измеряемая в количестве изменений (переходов) в секунду. Единица названа в честь французского инженера Эмиля Бодо, изобретателя телеграфного кода.

ё набор скоростей можно посмотреть, открыв порт

-3

Для корректной работы, необходимо в методе begin(*), вместо * указывать такое же число бод, что и в порте.

Чтобы отправить что-то в порт используется метод print(), который пишется также через точку, как и begin()

Для вывода текста, необходимо помещать его в двойные кавычки.
Для вывода текста, необходимо помещать его в двойные кавычки.

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

Метод print()
Метод print()
Метод println()
Метод println()

Числа и переменные для вывода пишутся без скобок

Для вывода числа с плавающей точкой до определённого числа после запятой, также используется метод print("переменная", "порядок").

Пример для числа с точкой.
Пример для числа с точкой.

Так же можно выводить числа в разных системах счисления print("переменная", "базис")

-8
Подсказка со всеми системами
Подсказка со всеми системами

Принятие данных от Arduino

При отправке данных, они складываются в буфер, объём которого 64 байта, и ждут пока их прочитают.

Для проверки буфера на наличие данных, существует команда Serial.available(); - она возвращает количество байт в буфере.

Например: используя if(Serial.available() > 0){}, то мы получим блок кода, который будет выполняться только когда в буфере что-то есть.

53   ← это ASCII-код символа '5'
10   ← это перевод строки (\n) от нажатия Enter
49   ← это ASCII-код символа '1'
10   ← опять перевод строки
57   ← это ASCII-код символа '9'
10   ← и ещё один перевод строки
53 ← это ASCII-код символа '5' 10 ← это перевод строки (\n) от нажатия Enter 49 ← это ASCII-код символа '1' 10 ← опять перевод строки 57 ← это ASCII-код символа '9' 10 ← и ещё один перевод строки

Serial.read() - метод, который читает, что было отправлено в порт и записывает в переменную.

Если поменять тип int на тип char, можно будет выводить символы, но только символы, выполнять математические операции нельзя.

Для перевода в целочисленный формат необходимо от Serial.read() отнять 0 в одиночных кавычках:

5      ← это '5' - '0' = 5
-38    ← это \n (10) - '0' = 10 - 48 = -38
7      ← это '7' - '0' = 7
-38    ← опять \n
3      ← это '3' - '0' = 3
-38    ← опять \n
5 ← это '5' - '0' = 5 -38 ← это \n (10) - '0' = 10 - 48 = -38 7 ← это '7' - '0' = 7 -38 ← опять \n 3 ← это '3' - '0' = 3 -38 ← опять \n

Этот метод подойдёт только для цифр 0 - 9, для двузначных чисел он не будет работать. Дело в том, что согласно таблице символов ASCII код нуля - 48, соответственно 1 - 49, 2 - 50 и т.д. Конструкция: Serial.read() - '0', здесь берётся разность не самих чисел, а их кодов, которая будет совпадать с вводимым числом.

Числа больше 9, будут разбиваться на отдельные и переменная будет перезаписываться, например: число 12345, переменная сначала будет равна 1, потом 2, 3 и т.д. до 5.

Для того, чтобы принять всё число целиком, есть метод Serial.parseInt()

777   ← вы отправили 777 и Enter
0     ← после обработки 777, в буфере остался \n, и parseInt() вернул 0
123   ← вы отправили 123
0     ← опять \n
321   ← вы отправили 321
0     ← опять \n
777 ← вы отправили 777 и Enter 0 ← после обработки 777, в буфере остался \n, и parseInt() вернул 0 123 ← вы отправили 123 0 ← опять \n 321 ← вы отправили 321 0 ← опять \n

Этот метод имеет некоторые ограничения:

  1. Не читает отрицательные числа по умолчанию: По умолчанию parseInt() читает только положительные числа. Чтобы читать отрицательные, нужно явно разрешить: Serial.parseInt(); // читает только положительные, если написать в порт отрицательное число, то ничего не выведет Serial.parseInt(SKIP_ALL); // читает и отрицательные, будет выводить отрицательные числа.
  2. Останавливается на первом НЕ-цифровом символе: Символы, которые прерывают чтение: пробел ' ', перевод строки \n, запятая ',', любой другой НЕ-цифровой символ. Пример: Отправляем: "123abc456" parseInt() вернёт: 123 (остановился на 'a')
  3. Игнорирует ведущие НЕ-цифровые символы: Если перед числом идут буквы или другие символы — они игнорируются. Пример: Отправляем: "abc123", parseInt() вернёт: 123 (буквы пропущены)
  4. Не читает числа с плавающей точкой: parseInt() читает только целые числа. Для дробных чисел используйте Serial.parseFloat() Пример: Отправляем: "3.14", parseInt() вернёт: 3, parseFloat() вернёт: 3.14
  5. Читает только первый попавшийся номер: Если в буфере несколько чисел — прочитает только первое. Пример: Буфер: "10 20 30", parseInt() вернёт: 10 (второе и третье останутся в буфере)

Также время возврата числа увеличивается - это плата за удобство.

Метода Serial.flush() - очищает буфер.

Материалы для этой статьи взяты из видеокурса "Заметки Ардуинщика". Ссылка на урок.

Если остались вопросы, то пиши в комментарии!

Успехов!

#arduino #начинающий #урок #COM-порт