Контроллер Arduino обменивается данными с компьютером использую USB-порт.
На самом деле связь осуществляется по последовательному порту (Serial port,
COM-порт), для этого на компьютере, при установке драйвера для работы с
платой Arduino создается виртуальный COM-порт. На плате Arduino стоит
конвертер USB-COM (именно для работы этого конвертера и нужен драйвер),
позволяющий микроконтроллеру общаться с компьютером по последовательному
интерфейсу. Для того чтобы принимать или передавать данные через к COM-порт
к нему необходимо подключиться при помощи программ-терминалов порта.
В контроллере, на котором работает плата Arduino, поддержка последовательного
порта встроена в сам контролер, выводы которого, пины D0 и D1 и являются
входом и выходом этого порта. Именно поэтому пины D0 и D1 нельзя занимать
датчиками в момент прошивки, так как если эти пины будут заняты,
микроконтроллер не сможет получать данные, а программа Arduino IDE выдаст
ошибку загрузки. Если к этим пинам все-таки нужно что-то все-таки подключить
(например bluetooth-модуль), то следует сначала загрузить скетч, а уже потом
подключаться к этим пинам.
Кстати, к этим пинам можно подключаться при помощи программатора, чтобы
загрузить прошивку, ну или просто пообщаться с платой.
Интегрированная среда разработки Arduino IDE является программной частью
Платформы Arduino. Использование терминала является частью работы с Arduino,
поэтому разработчики решили включить последовательный терминал в программное
обеспечение. В среде Arduino это называется Монитор порта.
Создание соединения
Монитор порта есть в любой версией Arduino IDE. Чтобы открыть его,
просто щелкните значок "Монитор порта".
Выбор порта, который нужно открыть в мониторе, аналогичен выбору порта,
для загрузки кода Arduino. Перейдите в "Инструменты" -> "Порт" и выберите
тот же COM-порт, который вы используете в диспетчере устройств.
После открытия вы должны увидеть что-то вроде этого:
Настройки
Монитор порта имеет ограниченные настройки, но их достаточно для обработки
большинства ваших коммуникационных потребностей. Первая настройка, которую
вы можете изменить, это скорость передачи. Нажмите в раскрывающемся меню
скорости передачи. (по умолчанию 9600 бод)
Можно установить терминал на автопрокрутку, установив флажок в нижнем левом
углу.
Tinkercad circuit
В программе Tinkercad circuit тоже есть монитор порта, называется он
"монитор последовательного интерфейса". Чтобы открыть окно монитора необходимо
нажать кнопку "Код", внизу, после окна с текстом программы, будет кнопка
для открытия монитора:
Функции millis() и micros()
Работу монитора порта рассмотрим на примеру функций millis() и
micros()
millis() - функция, которая возвращает количество миллисекунд, которое
прошло с момента начала выполнения программы. Это значение не может
увеличиваться бесконечно и сбрасывается в ноль, в следствии переполнения
примерно через 50 дней.
После запуска программы кнопкой "Начать моделирования", в мониторе порта
будут появляться следующие строки:
Итак, в блоке void setup() всего одна строка: Serial.begin(9600);
Объект Serial - это набор функций для связи платы Arduino с компьютером
или другими устройствами, поддерживающими последовательный интерфейс обмена
данными. В данной строке, функция begin() инициирует последовательное
соединение и задает скорость передачи данных в бит/c (бод), в данном примере
эта скорость 9600 бод. Для обмена данными с компьютером используются следующие
значения: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 или
115200. При соединение через пины D0 и D1 могут быть использованы и другие
значения скорости, требуемые устройством с которым будет осуществляться
обмен данными.
Итак, в блоке void loop() две строки, с объектом Serial:
Serial.print("Time: "); и Serial.println(millis());, и уже
знакомая нам функция delay (1000);, которая просто останавливает
выполнение программы на время 1000 миллисекунд (1 секунда).
Функция print() передает данные через последовательный порт. В данном
примере, Serial.print("Time: "); выдаст в монитор порта Time:
Функция println() также передает данные через последовательный порт, но
добавляет за переданными данными символ переноса строки, поэтому следующий
вывод данных начнется с новой строки. В данном примере,
Serial.println(millis()); выдаст в монитор порта количество
миллисекунд, которое прошло с начала запуска программы, об этом позаботится
функция millis()
В результате работы программы, на экране монитора каждую секунду появляется
новая строка, содержащая количество миллисекунд, которое прошло с момента запуска
программы.
miсros() - функция, которая возвращает количество микросекунд, которое
прошло с момента начала выполнения программы. Это значение не может
увеличиваться бесконечно и сбрасывается в ноль, в следствии переполнения
примерно через 70 минут.
После запуска программы, в мониторе порта будут появляться следующие строки:
Отличие от предыдущей программы лишь в одной строке:
Serial.println(millis()); - эта функция выдаст в монитор порта количество
микросекунд, которое прошло с начала запуска программы, об этом позаботится
функция micros()
В результате работы программы, на экране монитора каждую секунду появляется
новая строка, содержащая количество микросекунд, которое прошло с момента
запуска программы.
Hello, world!
Обычно, этой фразой начинают знакомство с языком программирования. Мы же ею
закончим знакомство с монитором порта:
Здесь для нас новой будет последняя строка: Serial.end(); - это
функция, которая закрывает последовательное соединение. Если бы этой строки
не было, то фраза "Hello, world!" передавалась бы в монитор непрерывно
(попробуйте!), а так мы просто увидим: