главе 18, но дополнительно содержат стабилизаторы питания, несколько светодиодов и других компонентов, и, главное — встроенный загрузчик с преобразователем USB/UART, позволяющим и программировать контроллер через последовательный порт, и организовать «общение» программы с компьютером.
Для этой цели в контроллер на платах Arduino заранее записывается программа-загрузчик. Если вы будете программировать Arduino напрямую, через обычный ISP-программатор, то загрузчик, естественно, окажется испорченным. Однако его всегда можно восстановить с помощью среды Arduino IDE, потому любые эксперименты не приведут к фатальным последствиям. С другой стороны, на некоторых платах Arduino контроллер установлен на панельку, что позволяет применять плату совместно со средой программирования, как удобный программатор для МК AVR, которые потом можно устанавливать в другие схемы. Мы в основном воспользуемся одним из самых популярных модулей под названием Arduino Uno, а в главе 22 познакомимся с малогабаритным Arduino Mini.
Для начала работы необходимо установить и настроить среду Arduino IDE, чем мы сейчас и займемся.
Среда программирования Arduino или Arduino IDE (Integrated Development Environment, интегрированная среда разработки) отличается от других подобных продуктов простотой и компактностью. Установки фактически не требуется — просто скачайте ZIP-архив с официального сайта и распакуйте его на компьютере в любую папку, учитывая при этом, что размещать среду предпочтительно не в привычной Program Files (или в Program Files (x86) для 64-разрядных Windows), а в отдельном каталоге вне системных папок — иначе придется возиться с правами доступа (см. далее).
Если качать архив не с официальной англоязычной страницы, на которую обычно ссылаются в руководствах (http://www.arduino.cc/en/Main/Software), а с русской версии сайта [23], то вы получите среду сразу на русском языке (правда, возможно, не самой последней версии). Затем для удобства можно вынести на рабочий стол ярлык файла arduino.exe, и на этом основная часть установки завершена.
Однако в Windows придется выполнить еще один шаг — установить драйвер arduino, чтобы Arduino IDE «видела» устройство. Проще всего это сделать, уже имея плату Arduino в наличии. Ранее для каждой разновидности плат имелся свой драйвер (и существующее на момент создания этой главы описание на русскоязычной странице http://arduino.ru/Guide/Windows рассчитано на такой случай), но в последних версиях он заменен на универсальный arduino.inf. Этот драйвер находится в каталоге Drivers внутри скачанной вами папки с программным обеспечением (будьте внимательны: именно в папке Drivers, а не в подпапке FTDI USB Drivers).
Для установки драйвера подсоедините любую имеющуюся плату Arduino к порту USB компьютера, для чего потребуется обычный АВ-кабель USB (подключать плату дополнительно к источнику питания не надо). На плате должен при этом загореться зеленый светодиод ON. Если у вас Windows настроена на автоматическую установку драйверов, то сразу начнется поиск драйверов, который, естественно, закончится впустую (его можно сразу прервать, чтобы не терять времени). В Диспетчере устройств (Панель управления | Диспетчер устройств) в разделе Порты (СОМ и LPT) появится название платы — например, Arduino UNO (COMxx:).
Может так случиться, что этого названия не появится, а вместо него в общем списке возникнет Неизвестное устройство (Windows, особенно в последних версиях, — типичная вещь в себе, и часто ведет себя совершенно не так, как вы от нее ожидаете). В обоих случаях драйвер для этого устройства можно установить двумя путями: или прямо из Диспетчера устройств через пункт контекстного меню Обновить драйвер, или через апплет Панель управления | Устройства и принтеры, где должно возникнуть это самое Неизвестное устройство. Установка тогда делается через контекстное меню: Свойства | Оборудование | Свойства | Драйвер | Обновить. После этого выберите ручной поиск драйверов и укажите упомянутую ранее папку Drivers. В Диспетчере устройств и в окне Устройства и принтеры после этого возникнет соответствующее устройство с указанием номера привязанного к нему виртуального СОМ-порта — например, Arduino Uno (COM3).
На рис. 21.1 показано окно Arduino IDE после компилирования демонстрационного примера из коллекции сайта «Амперки», представляющего собой вывод на русифицированный строчный ЖК-дисплей традиционного «Здравствуй, мир!». Для компиляции с» целью проверки загруженного текста надо выбрать пункт меню Скетч | Проверить/Компилировать (или нажать сочетание клавиш
Рис. 21.1. Главное окно Arduino IDE
Обычно среды программирования перед компиляцией автоматически сохраняют текущий вариант текста программы, но здесь его придется сохранять отдельной операцией (перед выходом из среды об этом вам напомнят). Причем каждый проект вас заставят сохранять в отдельной папке, имя которой должно совпадать с именем файла (в общем-то, разумный подход, с точки зрения «чайника»).
А вот скомпилированный hex-файл, если он вдруг вам понадобится (его можно ведь загружать обычным программатором, без среды Arduino), придется поискать. Результаты деятельности Arduino IDE размещаются в недрах папки Пользователи\<имя пользователя>\АррDatа\Lосаl\Теmр (не путайте AppData с системной Application Data, куда вас, скорее всего, не пустят). Там вы найдете кучу папок с расширением tmp, название которых начинается с build (например, build290388496895462656.tmp) — внутри одной из них и находится искомый hex-файл, имя которого должно совпадать с именем файла программы.
Скриншот окна Arduino IDE на рис. 21.1 хорошо иллюстрирует главный недостаток программирования микроконтроллеров на высокоуровневом языке, таком, как Processing, — программа, содержащая всего два десятка строк, в памяти контроллера займет почти 3 килобайта (см. сообщение внизу). И хотя к этим двум десяткам следовало бы причислить еще пару-тройку сотен строк библиотеки LiquidCrystal (см. на скриншоте первую строку скетча[39]), все равно для такой простой программы это очень много — почти полторы тысячи команд AVR-контроллера, которые уже не влезут в память, например, знакомого нам ATtiny2313. Аналогичная программа на «голом» AVR-ассемблере заняла бы от силы пару сотен операторов и спокойно влезла бы в любой контроллер, имеющий достаточное количество выводов для управления строчным дисплеем. Такова цена за удобство и скорость разработки — написание и отладка подобной программы на ассемблере у опытного программиста запросто может занять целый день, а в среде Arduino даже неопытный любитель создаст ее с нуля от силы за час, который в основном потребуется для макетирования схемы с целью проверки функционирования.
Еще больше преимуществ, как мы увидим, такой язык в сравнении с ассемблером дает при выполнении операций с многобайтовыми числами или числами с плавающей запятой и производства некоторых других подобных действий (например, форматированного вывода чисел на дисплей). Эффективность труда программиста возрастает на много порядков.
Среда Arduino сама не найдет устройство. Даже если оно подключено, но по каким-то причинам связь с компьютером нарушена, то при попытке загрузки программы возникнет сообщение об ошибке (красная надпись внизу):
avrdude: stk500_getsync(): not in sync: resp=0x00
Сразу привыкайте к недоработкам редактора Arduino — среда при этом может невозмутимо сообщать, что Загрузка завершена (как говорится, не верь глазам своим!).
Чтобы этого красного сообщения не возникало, следует после установки драйвера и первого запуска arduino.exe сразу установить нужный СОМ-порт через меню Сервис | Последовательный порт. Тогда в нижнем левом углу окна программы появится надпись, соответствующая типу платы и подключенному порту. Если подключенная плата не определяется автоматически или определяется неверно (это может быть, например, при подключении через отдельный адаптер таких плат, как Arduino Mini, не имеющих встроенного USB-порта), то тип платы придется выбрать отдельно через меню Сервис | Плата.
В процессе отладки коммуникационных функций по последовательному порту вам понадобится отключать и включать устройство Arduino. Если вы используете стороннюю коммуникационную программу (как чаще всего и бывает, см. далее), и забудете ее закрыть перед программированием, то порт может оказаться недоступным для Arduino IDE. Прежде всего закройте коммуникационную программу и попробуйте загрузить программу в плату заново — скорее всего, дело только в этом. Но при многих включениях и отключениях платы Arduino драйвер может окончательно запутаться, в результате чего последовательный порт окажется недоступен и в среде Arduino, и в сторонних коммуникационных утилитах. Чтобы восстановить работоспособность порта, необязательно перезагружать компьютер. Найдите устройство Arduino в Диспетчере устройств и в контекстном меню разыщите пункт Отключить. Отключите устройство, и сразу же включите опять (в Windows 7 и 8 пункт меню будет называться Задействовать). После этого порт должен заработать, как надо.
После загрузки драйвера первым делом проверьте пункт Файл | Настройки (File | Preferences для англоязычной версии). Там вы можете поменять язык самой программы (и, кстати, также и язык сообщений об ошибках), отказаться от проверки наличия обновлений (иначе при каждом запуске будете получать назойливые предложения сменить русскую версию на последнюю английскую), и, главное, поменять размещение текстов ваших программ (скетчей), заданное по умолчанию.