- Arduino leonardo serial print не работает
- Руководство к Arduino Leonardo и Micro
- Отличия от Arduino Uno
- Единый процессор — и для выполнения программ, и для связи по USB.
- Переназначение порта при сбросе платы.
- Отсутствие сброса при открытии последовательного порта.
- Эмуляция клавиатуры и мыши.
- Раздельное функционирование USB и UART.
- Установка драйверов для Arduino Leonardo и Micro
- Инструкции для Windows
- Linux
- Прошивка программ в Arduino Leonardo и Micro
- Правила хорошего тона при программировании Arduino Leonardo и Micro
- Монитор порта, отладка
- Объект Serial
- Плоттер
- Использование пинов
- Отправка и парсинг
- Управляющие символы
- Видео
Arduino leonardo serial print не работает
Руководство к Arduino Leonardo и Micro
Для подключения к компьютеру Arduino Leonardo или Micro вам понадобится USB-кабель с разъемом Micro-B. Такой USB-кабель служит как для передачи данных, так и для питания платы. Чтобы прошить Arduino Leonardo, в среде разработки Arduino IDE из меню Tools > Board необходимо выбрать пункт » Arduino Leonardo» или «Arduino Micro» .
Отличия от Arduino Uno
В целом, порядок работы и программирования Leonardo и Micro точно такой же, как и в других моделях Ардуино. Тем не менее, существует и несколько важных отличий.
Единый процессор — и для выполнения программ, и для связи по USB.
Leonardo и Micro отличаются от других моделей Ардуино, прежде всего, тем, что в них для выполнения всех функций используется один микроконтроллер — и для выполнения программ, и для взаимодействия с компьютером по интерфейсу USB. В Arduino Uno и других моделях для выполнения этих двух функций используются разные микроконтроллеры, соответственно, USB-соединение с компьютером всегда остается активным, независимо от текущего состояния главного микроконтроллера. Объединение обеих функций в один микроконтроллер позволило сделать Leonardo более гибким во взаимодействии с компьютером, а также уменьшить его себестоимость за счет отсутствия дополнительного процессора.
Переназначение порта при сбросе платы.
В составе устройства нет отдельной микросхемы, обслуживающей последовательную связь, поэтому используемые последовательные порты являются виртуальным — как в операционной системе ПК, так и на самом устройстве. При запуске загрузчика, Leonardo/Micro автоматически создает экземпляр класса для работы с последовательным интерфейсом, точно так же, как компьютер создает экземпляр драйвера последовательного порта при подключении Ардуино. В системе подключенная плата является экземпляром специального класса драйвера для работы с USB (Connected Device Class — CDC).
Такая организация приводит к тому, что при каждом сбросе платы, USB-соединение с компьютером будет разрываться и устанавливаться вновь. В системе устройство будет исчезать из списка доступных портов, соответственно последовательные порты будут перенумеровываться. Поэтому все программы, в которых был открыт порт Ардуино, потеряют соединение с устройством. Это одно из явных отличий Leonardo/Micro от Arduino Uno, в котором сброс микроконтроллера (ATmega328P) не приводит к разрыву USB-соединения (которое поддерживается дополнительным процессором ATmega8U2 или ATmega16U2). Эти отличия приводит к некоторым особенностям установки драйвера, процесса прошивки и взаимодействия с устройством, которые описаны ниже.
Отсутствие сброса при открытии последовательного порта.
В отличие от Arduino Uno, Arduino Leonardo и Micro не перезапускают загруженный скетч при каждом открытии последовательного порта на компьютере. Это означает, что компьютер не получит данные, отправленные платой до открытия в операционной системе последовательного порта (в том числе, например, данные, отправляемые в блоке setup()).
Такое изменение приводит к тому, что любые функции для передачи последовательных данных (такие, как print(), println(), write() и др.), написанные в блоке setup, не будут вызываться в момент открытия последовательного порта. Чтобы обойти эту проблему, можно программно проверять статус последовательного порта после вызова функции Serial.begin(), например, так:
Эмуляция клавиатуры и мыши.
Одно из преимуществ использования единого процессора для выполнения программ и USB-связи — это гибкость при взаимодействии устройства с компьютером. В частности, благодаря этому Ардуино может определяться в системе не только, как виртуальный последовательный порт (также называемый CDC), используемый для прошивки и передачи данных (подобно Arduino Uno), но и работать в качестве HID-устройства, эмулируя клавиатуру или мышь. Предупреждения об использовании этого режима см. в разделе «Правила хорошего тона при программировании», приведенном ниже.
Раздельное функционирование USB и UART.
В Arduino Leonardo и Micro, основной класс Serial ассоциирован с драйвером виртуального последовательного порта для соединения с компьютером через USB. Физически он не соединен с выводами 0 и 1, как это сделано на платах Arduino Uno и в более старых версиях. Для обращения к аппаратному последовательному порту (выводам 0 и 1, RX и TX) используйте класс Serial1 . (Для получения дополнительной информации см. справку по классу Serial).
Отличия в распиновке.
Распиновка Arduino Leonardo несколько отличается от стандартного расположения некоторых выводов (особенно выводов интерфейсов SPI и TWI). Эти отличия подробно описаны на странице описания устройства.
Установка драйверов для Arduino Leonardo и Micro
- При первом подключении Leonardo или Micro к компьютеру Mac, автоматически запустится программа «Keyboard Setup Assistant». Т.к. для Leonardo настраивать здесь особо нечего, можно просто закрыть это окно, кликнув по красной кнопке в левом верхнем углу.
Инструкции для Windows
Нижеследующие инструкции, прежде всего, относятся к Windows 7, хотя они также подходят и для Windows XP (лишь с небольшими отличиями в диалоговых окнах).
- Подключите плату к компьютеру и дождитесь, пока Windows не запустит мастер установки драйверов. Если мастер не запустился автоматически, то вручную перейдите к Диспетчеру устройств (Пуск > Панель управления > Оборудование) и отыщите в списке строку Arduino Leonardo. Щелкните по ней правой кнопкой и выберите пункт «Обновить драйвер».
- В появившемся окне выберите «Выполнить поиск драйверов на этом компьютере» и жмите Далее.
- Жмите кнопку «Обзор. «. В появившемся окне перейдите к папке с программным обеспечением Ардуино (которое вы предварительно скачали). Выберите папку drivers и нажмите ОК, а затем Далее.
- Возникнет сообщение о том, что устанавливаемое оборудование не проходило тестирование в Windows Logo. Жмите на кнопку Все равно продолжить.
- Через несколько секунд появится сообщение о том, что мастер завершил установку программного обеспечения для Arduino Leonardo. Теперь закройте окно.
Linux
Под Linux установка драйверов не требуется вообще. (Проверено на Ubuntu 10.0.4)
Прошивка программ в Arduino Leonardo и Micro
В целом, процесс загрузки программы в Arduino Leonardo или Micro особо ничем не отличается от прошивки Uno или других моделей Ардуино. Достаточно в среде разработки нажать кнопку Upload, и ваша программа будет автоматически загружена в память Ардуино и запущена им на выполнение. В общих чертах этот процесс устроен точно так же, как и в Arduino Uno: среда Arduino инициирует сброс платы, который приводит к запуску загрузчика, отвечающего за получение, хранение и запуска нового скетча.
Однако, поскольку последовательный порт, взаимодействующий с устройством, является виртуальным и исчезает при каждом сбросе платы, то среда разработки Ардуино придерживается несколько другой стратегии при выборе таймингов на загрузку скетча, в отличие от Uno и других моделей. В частности, после автоматического сброса Leonardo или Micro (через последовательный порт, выбранный в меню Tools > Serial Port), среда Ардуино ожидает появления в системе нового виртуального последовательного (CDC) / COM-порта — того, который предположительно будет «прослушивать» загрузчик. После этого среда осуществляет отправку скетча на этот вновь созданный порт.
Если автоматический сброс не сработал, то ввиду описанных отличий, использовать физическую кнопку сброса для прошивки Arduino Leonardo/Micro нужно несколько по-другому. Нажмите и удерживайте нажатой кнопку сброса на плате, после этого в среде разработки Ардуино кликните по кнопке Upload. Отпускайте кнопку сброса только после того, как в строке состояния программы появится надпись «Uploading. «. После этого на плате запустится загрузчик, что приведет к созданию виртуального (CDC) последовательного порта на компьютере. Среда разработки увидит новый порт в системе и начнет передачу прошивки через этот порт. Опять таки, эти действия необходимы, только если на устройстве не сработала традиционная процедура прошивки (т.е. по нажатию одной кнопки Upload). (Обратите внимание, что автоматический сброс устройства происходит, если компьютер открывает последовательный порт на скорости 1200 бод и затем закрывает его; соответственно, он может не сработать, если что-то в системе оказывает влияние на USB-соединение с платой — например, отключенные прерывания).
Правила хорошего тона при программировании Arduino Leonardo и Micro
Несколько слов предостережения об использовании библиотек USB Mouse и Keyboard : постоянно запущенные на устройстве библиотеки Mouse или Keyboard могут сильно усложнить процесс прошивки Ардуино. Такие функции, как Mouse.move() и Keyboard.print() перемещают указатель мыши или постоянно отправляют сигналы о нажатии клавиш подключенному компьютеру, поэтому они должны вызываться только тогда, когда вы готовы обрабатывать поступающие от них события. Рекомендуется использовать какую-нибудь систему управления, позволяющую выключать подобную функциональность, например, в зависимости от положения переключателя или сигнала на выводе, состояние которого вы можете контролировать. Перед использованием функций библиотек Mouse или Keyboard непосредственно с компьютером, лучше всего протестировать возвращаемые ими значения с помощью функции Serial.print(). Так вы сможете удостовериться в правильности отправляемых значений. Подробнее см. примеры работы с библиотеками Mouse и Keyboard.
Эффективное использование программы Serial Monitor: поскольку последовательные данные идут только через один процессор, Ардуино может заполнять приемный буфер компьютера гораздо быстрее, чем другие устройства. Вам следует помнить, что при циклической отправке данных по последовательному интерфейсу, например, так:
Serial Monitor в среде разработки может подтормаживать, поскольку он не будет успевать отображать поступающие от Ардуино данные. Если у вас возникла такая ситуация, добавьте небольшую задержку внутрь вашего цикла, чтобы приемный буфер компьютера не заполнялся слишком быстро. Поможет даже небольшая задержка в 1 мс:
Приложения, работающие с последовательным портом через родные библиотеки, а не через библиотеку RXTX, как правило, считывают данные с порта гораздо быстрее, поэтому в большинстве случаев вы не столкнетесь с этой ошибкой за исключением программ, построенных на базе функций RXTX (в том числе Serial Monitor, Processing и пр.).
Для получения дополнительной информации об Arduino Leonardo и Micro, см. описание устройств Leonardo и Micro. Подробнее о возможностях работы с USB см. справку по библиотекам Mouse и Keyboard.
Источник
Монитор порта, отладка
Как мы с вами знаем из урока “О платформе“, на платах Ардуино стоит USB-TTL конвертер, позволяющий микроконтроллеру в текстовом режиме “консоли” общаться с компьютером по последовательному интерфейсу, Serial. На компьютере создаётся виртуальный COM порт, к которому можно подключиться при помощи программ-терминалов порта, и принимать-отправлять текстовые данные. Через этот же порт загружается прошивка, т.к. поддержка Serial является встроенной в микроконтроллер на “железном” уровне, и USB-TTL преобразователь подключен именно к этим выводам микроконтроллера. На плате Arduino Nano это кстати пины D0 и D1.
К этим же пинам можно подключаться при помощи отдельных плат “программаторов”, например на чипах CP2102 или том же CH340 с целью загрузки прошивки или просто общения с платой. В самой Arduino IDE тоже есть встроенная “консоль” – монитор порта, кнопка с иконкой лупы в правом верхнем углу программы. Нажав на эту кнопку мы откроем сам монитор порта, в котором будут настройки:
Если с отправкой, автопрокруткой, отметками времени и кнопкой “очистить вывод” всё понятно, то конец строки и скорость мы рассмотрим подробнее:
- Конец строки: тут есть несколько вариантов на выбор, чуть позже вы поймёте, на что они влияют. Лучше поставить нет конца строки, так как это позволит избежать непонятных ошибок на первых этапах знакомства с Ардуино.
- Нет конца строки – никаких дополнительных символов в конце введённых символов после нажатия на кнопку отправка/Enter
- NL – символ переноса строки в конце отправленных данных
- CR – символ возврата каретки в конце отправленных данных
- NL+CR – и то и то
- Скорость – тут на выбор нам даётся целый список скоростей, т.к. общение по Serial может осуществляться на разных скоростях, измеряемых в бод (baud), и если скорости приёма и отправки не совпадают – данные будут получены некорректно. По умолчанию скорость стоит 9600, её и оставим.
- Очистить вывод – тут всё понятно, очищает вывод
Объект Serial
Начнём знакомство с одной из самых полезных штук Arduino-разработчика – Serial . Serial это объект класса Stream, позволяющий как просто принимать/отправлять данные через последовательный порт, так и наследует из класса Stream кучу интересных возможностей и фишек, давайте сразу их все рассмотрим, а потом перейдём к конкретным примерам.
Запустить связь по Serial на скорости speed (baud rate, бит в секунду). Скорость можно поставить любую, но есть несколько “стандартных”. Список скоростей для монитора порта Arduino IDE:
- 300
- 1200
- 2400
- 4800
- 9600 чаще всего используется, можно назвать стандартной для большинства устройств с связью через TTL
- 19200
- 38400
- 57600
- 115200 тоже часто встречается
- 230400
- 250000
- 500000
- 1000000
- 2000000
Отправляет в порт значение val – число или строку. В отличие от write выводит именно символы, т.е. отправив 88 вы получите 88: Serial.print(88); выведет 88. Также метод print/println имеет несколько настроек для разных данных, что делает его очень удобным инструментом отладки:
format позволяет настраивать вывод данных: BIN, OCT, DEC, HEX выведут число в соответствующей системе исчисления, а цифра после вывода float позволяет настраивать выводимое количество знаков после точки
Читает данные из буфера и ищет набор символов target (тип char), опционально можно указать длину length. Возвращает true, если находит указанные символы. Ожидает передачу по таймауту
Плоттер
Помимо монитора последовательного порта, в Arduino IDE есть плоттер – построитель графиков в реальном времени по данным из последовательного порта. Достаточно отправить значение при помощи команды Serial.println(значение) и открыть плоттер по последовательному соединению, например построим график значения с аналогового пина A0:
Вывод значений происходит каждые 10 миллисекунд, а каждые 300 миллисекунд значения обновляются. Получаем вот такой график:
Использование пинов
Как я писал выше, аппаратный Serial имеет выводы на ноги микроконтроллера, для Nano/Uno/Mini это выводы D0 и D1. Можно ли работать с этими пинами, как с обычными цифровыми пинами? При отключенном Serial – можно, при включенном – нет. После вызова Serial.begin() ноги перестают функционировать как цифровые пины в ручном режиме, но после вызова Serial.end() можно снова ими пользоваться!
Отправка и парсинг
Рассмотрим самый классический пример для всех языков программирования: Hello World!
Вывод: 0 50 68 85 15 214 63 254 – элементы массива, разделённые пробелами! Проблемы возникают при попытке принять данные в порт. Дело в том, что метод read() читает один символ, даже если вы отправите длинное число – программа получит его по одной цифре, и составлять число из цифр придётся вручную. Проблема усугубляется тем, что read() читает именно символ, то есть код символа в таблице ASCII.
Так как же принять именно цифру? Есть хитрость – вычитать из полученного кода символа код цифры 0, либо сам 0 в виде символа: ‘0’
Также для принятия одиночных чисел у нас есть готовый метод – parseInt() / parseFloat() – для целочисленных и рациональных чисел соответственно. Процесс приёма и расшифровки данных называется парсинг (parsing). Давайте примем в порт число 1234, используя готовый метод парсинга.
Итак, мы используем конструкцию if (Serial.available()) <> чтобы опрашивать порт только в том случае, если в него что-то пришло. Отправив в порт число 1234 мы получим ответ ОК, отправив любое другое – error. Также вы заметите, что после отправки проходит секунда, прежде чем плата ответит. Эта секунда спрятана внутри метода parseInt, программа ждёт секунду после принятия данных, чтобы все данные успели прийти. Секунда это очень много, достаточно было ждать, скажем, 50 миллисекунд. Это можно сделать при помощи метода setTimeout() .
Теперь после отправки цифры программа будет ждать всего 50 мс, и сразу же вам ответит. Остальные алгоритмы отправки и парсинга, в том числе обмена разнотипными данными между Ардуинами и другими платами смотри в уроке общение по Serial.
Управляющие символы
Существуют так называемые управляющие символы, позволяющие форматировать вывод. Их около десятка, но вот самые полезные из них
- \n – новая строка
- \r – возврат каретки
- \v – вертикальная табуляция
- \t – горизонтальная табуляция
Также если для вывода вы захотите использовать одинарные ‘ или двойные кавычки, “ или обратный слэш \ – нужно выводить их при помощи соответствующего спецсимвола, иначе ваш вывод “поломается”, я думаю, не нужно объяснять, почему:
- \» – двойные кавычки
- \’ – апостроф
- \\ – обратный слэш
- \0 – нулевой символ
- \? – знак вопроса
Как использовать? Просто писать в вывод. Например комбинация \r\n переведёт строку и вернёт курсор в левое положение:
Именно так кстати и работает функция println() , она просто добавляет вывод \r\n после print() =) Символы табуляции позволят удобно отправлять данные для последующей вставки в excel или другие таблицы. Например выведем несколько степеней двойки в виде таблицы, используя символ табуляции \t :
Результат скопируем и вставим в excel
Видео
Источник