На каком языке пишется arduino. Arduino для начинающих: пошаговые инструкции

Первое, с чего следует начать работу по освоению Arduino – это приобрести отладочную плату (хорошо бы сразу приобрести монтажную плату и т.п.). Уже описывал, какие виды плат Arduino представлены на рынке. Кто еще не читал статью советую ознакомиться. Для изучения основ выбираем стандартную плату Arduino Uno (оригинал или хорошую китайскую копию — решать вам). При первом подключении оригинальной платы проблем возникнуть не должно, а вот с «китайцем» нужно будет немного поковыряться (не переживайте – всё покажу и расскажу).

Подключаем Arduino к компьютеру USB кабелем. На плате должен засветиться светодиод «ON «. В диспетчере устройств появится новое устройство «Неизвестное устройство «. Необходимо установить драйвер. Тут внесу небольшую неясность (кот отвлек – я не запомнил, какой из драйверов решил «проблему неизвестного устройства ».

Предварительно скачал и распаковал программную средy Arduino (arduino-1.6.6-windows ). Затем скачал этот . Он самораспаковывающейся. Запустил файл CH341SER.EXE . Выбрал установку (INSTALL) . После установки появилось сообщение, нажал «Ок » (прочитать не успел).

После перешёл в свойства все еще «неизвестного устройства» и выбрал кнопку «Update Driver». Выбрал вариант «Установка из указанного места» – указал папку с разархивированной программной средой Arduino. И о чудо – всё удачно заработало…

Запускаем программу Arduino (в моём случае 1.6.6) и разрешаем доступ.

Все проекты (программы) для Arduino состоят из двух частей: void setup и void loop . void setup выполняется всего один раз, а void loop выполняется снова и снова.

Прежде чем продолжим, необходимо выполнить две обязательные операции:

— указать в программной среде Arduino, какую плату вы используете. Tool->board-> Arduino Uno. Если отметка уже стоит на нужной вам плате – это хорошо, если нет – ставим отметку.

— указать в программной среде какой последовательный порт вы используете для связи с платой. Tool->port-> COM3. Если отметка уже стоит на порте – это хорошо, если нет – ставим отметку. Если у вас в разделе порты представлен больше, чем один порт, как же узнать, какой именно используется для соединения с платой? Берём плату и отсоединяем от неё провод. Снова заходим в порты и смотрим, какой из них исчез. В моём случае вкладка «порты» вообще стала не активной.

Снова подключаем провод USB.

Для первой программы никаких дополнительных модулей не нужно. Будем включать светодиод, который уже смонтирован на плате (на 13 выводе микроконтроллера).

Для начала сконфигурим 13 вывод (на вход или на выход).

Для этого вводим в блок «void setup » команду pinMode , в скобках указываем параметры (13, OUTPUT ) (Какой вывод задействован, Режим работы ). Программная среда выделяет слова/команды соответствующим цветом шрифта.

Переходим в блок «void loop » и вводим команду digitalWrite с параметрами (13, HIGH) .


Первая программа готова, теперь осталось загрузить её в микроконтроллер. Нажимаем кнопку UPLOAD.

Светодиод засветился. Но не стоит так скептически относиться к простоте первой программы. Вы только, что освоили первую управляющую команду. Вместо светодиода ведь можно подключить любую нагрузку (будь-то освещение в комнате или сервопривод, перекрывающий подачу воды), но об этом всём поговорим позже…

Светодиод мы включили, он немного посветил, пора его выключать. Для этого видоизменим написанную нами программу. Вместо «HIGH » напишем «LOW ».


Нажимаем кнопку UPLOAD. Светодиод погас.

Мы уже познакомились с понятием « », пора им воспользоваться. Дальнейшие программы будут становится все объёмнее и сложнее, а работы по их изменению будут занимать все больше и больше времени, если мы оставим подобный стиль написания кода.

Смотрим на программу (снова включим светодиод). Зададим номер вывода микроконтроллера не числом 13 , а переменной, которой будет присвоено значение соответствующего вывода (в нашем случае 13). В дальнейшем будет очень удобно изменять значения переменных в начале программы, вместо того, чтобы шарится по коду в поисках тех мест, где необходимо произвести замены значений.

Создаём глобальную переменную int LED_pin = 13; (тип переменной, имя переменной, присваиваемое ей значение ).


Нажимаем кнопку UPLOAD. Светодиод светится. Все работает отлично.

В этом уроке, кроме включения/выключения светодиода, мы еще научимся мигать им.

Для этого вводим вторую команду «digitalWrite » с параметрами (LED_pin, LOW ).


Нажимаем кнопку UPLOAD. И что мы видим? Светодиод светится «в пол наказа». Причина кроется в том, что время переключения двух состояний (HIGH и LOW ) ничтожно мало и человеческий глаз не может уловить эти переключения. Необходимо увеличить время нахождения светодиода в одном из состояний. Для этого пишем команду delay с параметром (1000 ) . Задержка в миллисекундах: 1000 миллисекунд – 1 секунда. Алгоритм программы следующий: включили светодиод – ждём 1 секунду, выключили светодиод – ждём 1 секунду и т.д.


Нажимаем кнопку UPLOAD. Светодиод начал мерцать. Все работает.

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


Нажимаем кнопку UPLOAD. Светодиод мерцает, как и мерцал.

Доработаем написанную нами программу. Задачи следующие:

  • Светодиод включен 0,2 секунды и выключен 0,8 секунды;
  • Светодиод включен 0,7 секунды и выключен 0,3 секунды.

В программе созданы 2 переменные, что отвечают за временные задержки. Одна определяет время работы включенного светодиода, а вторая – время работы выключенного светодиода.

Спасибо за внимание. До скорой встречи!

» представляет учебный курс «Arduino для начинающих». Серия представлена 10 уроками, а также дополнительным материалом. Уроки включают текстовые инструкции, фотографии и обучающие видео. В каждом уроке вы найдете список необходимых компонентов, листинг программы и схему подключения. Изучив эти 10 базовых уроков, вы сможете приступить к более интересным моделям и сборке роботов на основе Arduino. Курс ориентирован на новичков, чтобы к нему приступить, не нужны никакие дополнительные сведения из электротехники или робототехники.

Краткие сведения об Arduino

Что такое Arduino?

Arduino (Ардуино) — аппаратная вычислительная платформа, основными компонентами которой являются плата ввода-вывода и среда разработки. Arduino может использоваться как для создания автономных интерактивных объектов, так и подключаться к программному обеспечению, выполняемому на компьютере. Arduino как и относится к одноплатным компьютерам.

Как связаны Arduino и роботы?

Ответ очень прост — Arduino часто используется как мозг робота.

Преимущество плат Arduino перед аналогичными платформами — относительно невысокая цена и практически массовое распространение среди любителей и профессионалов робототехники и электротехники. Занявшись Arduino, вы найдете поддержку на любом языке и единомышленников, которые ответят на вопросы и с которым можно обсудить ваши разработки.

Урок 1. Мигающий светодиод на Arduino

На первом уроке вы научитесь подключать светодиод к Arduino и управлять его мигать. Это самая простая и базовая модель.

Светодиод — полупроводниковый прибор, создающий оптическое излучение при пропускании через него электрического тока в прямом направлении.

Урок 2. Подключение кнопки на Arduino

На этом уроке вы научитесь подключать кнопку и светодиод к Arduino.

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

Урок 3. Подключение потенциометра на Arduino

В этом уроке вы научитесь подключать потенциометр к Arduino.

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

Урок 4. Управление сервоприводом на Arduino

На этом уроке вы научитесь подключать сервопривод к Arduino.

Сервопривод – это мотор, положением вала которого можно управлять, задавая угол поворота.

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

Урок 5. Трехцветный светодиод на Arduino

На этом уроке вы научитесь подключать трехцветный светодиод к Arduino.

Трехцветный светодиод (rgb led) — это три светодиода разных цветов в одном корпусе. Они бывают как с небольшой печатной платой, на которой расположены резисторы, так и без встроенных резисторов. В уроке рассмотрены оба варианта.

Урок 6. Пьезоэлемент на Arduino

На этом уроке вы научитесь подключать пьезоэлемент к Arduino.

Пьезоэлемент — электромеханический преобразователь, который переводит электричеcкое напряжение в колебание мембраны. Эти колебания и создают звук.

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

Урок 7. Фоторезистор на Arduino

На этом уроке нашего курса вы научитесь подключать фоторезистор к Arduino.

Фоторезистор — резистор, сопротивление которого зависит от яркости света, падающего на него.

В нашей модели светодиод горит только если яркость света над фоторезистором меньше определенной, эту яркость можно регулировать в программе.

Урок 8. Датчик движения (PIR) на Arduino. Автоматическая отправка E-mail

На этом уроке нашего курса вы научитесь подключать датчик движения (PIR) к Arduino, а также организовывать автоматическую отправку e-mail.

Датчик движения (PIR) — инфракрасный датчик для обнаружения движения или присутствия людей или животных.

В нашей модели при получении с PIR-датчика сигнала о движении человека Arduino посылает компьютеру команду отправить E-mail и отправка письма происходит автоматически.

Урок 9. Подключение датчика температуры и влажности DHT11 или DHT22

На этом уроке нашего вы научитесь подключать датчик температуры и влажности DHT11 или DHT22 к Arduino, а также познакомитесь с различиями в их характеристиках.

Датчик температуры и влажности — это составной цифровой датчик, состоящий из емкостного датчика влажности и термистора для измерения температуры.

В нашей модели Arduino считывает показания датчика и осуществляется вывод показаний на экран компьютера.

Урок 10. Подключение матричной клавиатуры

На этом уроке нашего курса вы научитесь подключать матричную клавиатуру к плате Arduino, а также познакомитесь с различными интересными схемами.

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

Урок 11. Подключение модуля часов реального времени DS3231

На последнем уроке нашего курса вы научитесь подключать модуль часов реального времени из семейства
DS к плате Arduino, а также познакомитесь с различными интересными схемами.

Модуль часов реального времени - это электронная схема, предназначенная для учета хронометрических данных (текущее время, дата, день недели и др.), представляет собой систему из автономного источника питания и учитывающего устройства.

Приложение. Готовые каркасы и роботы Arduino


Начинать изучать Arduino можно не только с самой платы, но и с покупки готового полноценного робота на базе этой платы — робота-паука, робота-машинки, робота-черепахи и т.п. Такой способ подойдет и для тех, кого электрические схемы не особо привлекают.

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

Еще один вариант — покупка каркаса или корпуса робота: платформы на колесиках или гусенице, гуманоида, паука и т.п. В этом случае начинку робота придется делать самостоятельно.

Приложение. Мобильный справочник


– помощник для разработчиков алгоритмов под платформу Arduino, цель которого дать конечному пользователю возможность иметь при себе мобильный набор команд (справочник).

Приложение состоит из 3-х основных разделов:

  • Операторы;
  • Данные;
  • Функции.

Где купить Arduino


Наборы Arduino

Курс будет пополняться дополнительными уроками. Подпишитесь на нас

Здравствуйте! Я Аликин Александр Сергеевич, педагог дополнительного образования, веду кружки «Робототехника» и «Радиотехника» в ЦДЮТТ г. Лабинска. Хотел бы немного рассказать об упрощенном способе программирования Arduino с помощью программы «ArduBloсk».

Эту программу я ввел в образовательный процесс и восхищен результатом, у детей она пользуется особым спросом, особенно при написании простейших программ или для создания какого-то начального этапа сложных программ. ArduBloсk является графической средой программирования, т. е. все действия выполняются с нарисованными картинками с подписанными действиями на русском языке, что в разы упрощает изучение платформы Arduino. Дети уже со 2-го класса с легкостью осваивают работу с Arduino благодаря этой программе.

Да, кто-то может сказать, что еще существует Scratch и он тоже очень простая графическая среда для программирования Arduino. Но Scratch не прошивает Arduino, а всего лишь управляет им по средством USB кабеля. Arduino зависим от компьютера и не может работать автономно. При создании собственных проектов автономность для Arduino - это главное, особенно при создании роботизированных устройств.

Даже всеми известные роботы LEGO, такие как NXT или EV3 нашим ученикам уже не так интересны с появлением в программировании Arduino программы ArduBloсk. Еще Arduino намного дешевле любых конструкторов LEGO и многие компоненты можно просто взять от старой бытовой электронной техники. Программа ArduBloсk поможет в работе не только начинающим, но и активным пользователям платформы Arduino.

Итак, что же такое ArduBloсk? Как я уже говорил, это графическая среда программирования. Практически полностью переведена на русский язык. Но в ArduBloсk изюминка не только это, но и то, что написанную нами программу ArduBloсk конвертирует в код Arduino IDE. Эта программа встраивается в среду программирования Arduino IDE, т. е. это плагин.

Ниже приведен пример мигающего светодиода и конвертированной программы в Arduino IDE. Вся работа с программой очень проста и разобраться в ней сможет любой школьник.

В результате работы на программе можно не только программировать Arduino, но и изучать непонятные нам команды в текстовом формате Arduino IDE, ну а если же «лень» писать стандартные команды - стоит быстрыми манипуляциями мышкой набросать простенькую программку в ArduBlok, а в Arduino IDE её отладить.

Чтобы установить ArduBlok, необходимо для начала загрузить и установить Arduino IDE с официального сайта Arduino и разобраться с настройками при работе с платой Arduino UNO. Как это сделать описано на том же сайте или же на Амперке , либо посмотреть на просторах YouTube. Ну, а когда со всем этим разобрались, необходимо скачать ArduBlok с официального сайта, вот . Последние версии скачивать не рекомендую, для начинающих они очень сложны, а вот версия от 2013-07-12 - самое то, этот файл там самый популярный.

Затем, скачанный файл переименовываем в ardublock-all и в папке «документы». Создаем следующие папки: Arduino > tools > ArduBlockTool > tool и в последнею кидаем скачанный и переименованный файл. ArduBlok работает на всех операционных системах, даже на Linux, проверял сам лично на XP, Win7, Win8, все примеры для Win7. Установка программы для всех систем одинакова.

Ну, а если проще, я приготовил на Mail-диске 7z архив , распаковав который найдете 2 папки. В одной уже рабочая программа Arduino IDE, а в другой папке содержимое необходимо отправить в папку документы.

Для того, чтобы работать в ArduBlok, необходимо запустить Arduino IDE. После чего заходим во вкладку Инструменты и там находим пункт ArduBlok, нажимаем на него - и вот она, цель наша.

Теперь давайте разберемся с интерфейсом программы. Как вы уже поняли, настроек в ней нет, а вот значков для программирования предостаточно и каждый из них несет за собой команду в текстовом формате Arduino IDE. В новых версиях значков еще больше, поэтому разобраться с ArduBlok последней версии сложно и некоторые из значков не переведены на русский.

В разделе «Управление» мы найдем разнообразные циклы.

В разделе «Порты» мы можем с вами управлять значениями портов, а также подключенными к ним звукоизлучателя, сервомашинки или ультразвукового датчика приближения.

В разделе «Числа/Константы» мы можем с вами выбрать цифровые значения или создать переменную, а вот то что ниже вряд ли будите использовать.

В разделе «Операторы» мы с вами найдем все необходимые операторы сравнения и вычисления.

В разделе «Утилиты» в основном используются значки со временем.

«TinkerKit Bloks»- это раздел для приобретенных датчиков комплекта TinkerKit. Такого комплекта у нас, конечно же, нет, но это не значит, что для других наборов значки не подойдут, даже наоборот - ребятам очень удобно использовать такие значки, как включения светодиода или кнопка. Эти знаки используются практически во всех программах. Но у них есть особенность - при их выборе стоят неверные значки обозначающие порты, поэтому их необходимо удалить и подставить значок из раздела «числа/константы» самый верхний в списке.

«DF Robot» - этот раздел используется при наличии указанных в нем датчиков, они иногда встречаются. И наш сегодняшний пример - не исключение, мы имеем «Регулируемый ИК выключатель» и «Датчик линии». «Датчик линии» отличается от того, что на картинке, так как он от фирмы Амперка. Действия их идентичны, но датчик от Амперки намного лучше, так как в нем имеется регулятор чувствительности.

«Seeedstudio Grove» - датчики этого раздела мной ни разу не использовались, хотя тут только джойстики. В новых версиях этот раздел расширен.

И последний раздел это «Linker Kit». Датчики, представленные в нем, мне не попадались.

Хочется показать пример программы на роботе, двигающемся по полосе. Робот очень прост, как в сборке, так и в приобретении, но обо всем по порядку. Начнем с его приобретения и сборки.

Вот сам набор деталей все было приобретено на сайте Амперка .

  1. AMP-B001 Motor Shield (2 канала, 2 А) 1 890 руб
  2. AMP-B017 Troyka Shield 1 690 руб
  3. AMP-X053 Батарейный отсек 3×2 AA 1 60 руб
  4. AMP-B018 Датчик линии цифровой 2 580 руб
  5. ROB0049 Двухколёсная платформа miniQ 1 1890 руб
  6. SEN0019 Инфракрасный датчик препятствий 1 390 руб
  7. FIT0032 Крепление для инфракрасного датчика препятствий 1 90 руб
  8. A000066 Arduino Uno 1 1150 руб

Для начала соберем колесную платформу и припаяем к двигателям провода.

Затем установим стойки, для крепления платы Arduino UNO, которые были взяты от старой материнской платы ну или иные подобные крепления.

Затем крепим на эти стойки плату Arduino UNO, но один болтик прикрутить не получиться - разъемы мешают. Можно, конечно, их выпаять, но это уже на ваше усмотрение.

Следующим крепим инфракрасный датчик препятствий на его специальное крепление. Обратите внимание, что регулятор чувствительности находиться сверху, это для удобства регулировки.

Теперь устанавливаем цифровые датчики линии, тут придется поискать пару болтиков и 4 гайки к ним Две гайки устанавливаем между самой платформой и датчиком линии, а остальными фиксируем датчики.

Следующим устанавливаем Motor Shield или по другому можно назвать драйвер двигателей. В нашем случае обратите внимание на джампер. Мы не будем использовать отдельное питание для двигателей, поэтому он установлен в этом положение. Нижняя часть заклеивается изолентой, это чтобы не было случайных замыканий от USB разъема Arduino UNO, это на всякий случай.

Сверху Motor Shield устанавливаем Troyka Shield. Он необходим для удобства соединения датчиков. Все используемые нами сенсоры цифровые, поэтому датчики линии подключены к 8 и 9 порту, как их еще называют пины, а инфракрасный датчик препятствий подключен к 12 порту. Обязательно обратите внимание, что нельзя использовать порты 4, 5, 6, 7 так как оны используются Motor Shield для управлением двигателями. Я эти порты даже специально закрасил красным маркером, чтобы ученики разобрались.

Если вы уже обратили внимание, мной была добавлена черная втулка, это на всякий случай, чтобы установленный нами батарейный отсек не вылетел. И наконец, всю конструкцию мы фиксируем обычной резинкой.

Подключения батарейного отсека может быть 2-х видов. Первый подключение проводов к Troyka Shield. Также возможно подпаять штекер питания и подключать уже к самой плате Arduino UNO.

Вот наш робот готов. Перед тем как начать программировать, надо будет изучить, как все работает, а именно:
- Моторы:
Порт 4 и 5 используются для управления одним мотором, а 6 и 7 другим;
Скоростью вращения двигателей мы регулируя ШИМом на портах 5 и 6;
Вперед или назад, подавая сигналы на порты 4 и 7.
- Датчики:
У нас все цифровые, поэтому дают логические сигналы в виде 1 либо 0;
А что бы их отрегулировать, в них предусмотрены специальные регуляторы а при помощи подходящей отвертки их можно откалибровать.

Подробности можно узнать на Амперке . Почему тут? Потому что там очень много информации по работе с Arduino.

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

И программа конвертированная в Arduino IDE:

Void setup() { pinMode(8 , INPUT); pinMode(12 , INPUT); pinMode(9 , INPUT); pinMode(4 , OUTPUT); pinMode(7 , OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); } void loop() { if (digitalRead(12)) { if (digitalRead(8)) { if (digitalRead(9)) { digitalWrite(4 , HIGH); analogWrite(5, 255); analogWrite(6, 255); digitalWrite(7 , HIGH); } else { digitalWrite(4 , HIGH); analogWrite(5, 255); analogWrite(6, 50); digitalWrite(7 , LOW); } } else { if (digitalRead(9)) { digitalWrite(4 , LOW); analogWrite(5, 50); analogWrite(6, 255); digitalWrite(7 , HIGH); } else { digitalWrite(4 , HIGH); analogWrite(5, 255); analogWrite(6, 255); digitalWrite(7 , HIGH); } } } else { digitalWrite(4 , HIGH); analogWrite(5, 0); analogWrite(6, 0); digitalWrite(7 , HIGH); } }

В заключении хочу сказать, эта программа просто находка для образования, даже для самообучения она поможет изучить команды Arduino IDE. Самая главная изюминка - это то, что более 50 значков установки, она начинает «глючить». Да, действительно, это изюминка, так как постоянное программирование только на ArduBlok не обучит вас программированию в Arduino IDE. Так называемый «глюк» дает возможность задумываться и стараться запоминать команды для точной отладки программ.

Желаю успехов.

Из чего состоит программа

Для начала стоит понять, что программу нельзя читать и писать как книгу: от корки до корки, сверху вниз, строку за строкой. Любая программа состоит из отдельных блоков. Начало блока кода в C/C++ обозначается левой фигурной скобкой { , его конец - правой фигурной скобкой } .

Блоки бывают разных видов и какой из них когда будет исполняться зависит от внешних условий. В примере минимальной программы вы можете видеть 2 блока. В этом примере блоки называются определением функции . Функция - это просто блок кода с заданным именем, которым кто-то затем может пользоваться из-вне.

В данном случае у нас 2 функции с именами setup и loop . Их присутствие обязательно в любой программе на C++ для Arduino. Они могут ничего и не делать, как в нашем случае, но должны быть написаны. Иначе на стадии компиляции вы получите ошибку.

Классика жанра: мигающий светодиод

Давайте теперь дополним нашу программу так, чтобы происходило хоть что-то. На Arduino, к 13-му пину подключён светодиод. Им можно управлять, чем мы и займёмся.

void setup() { pinMode(13 , OUTPUT) ; } void loop() { digitalWrite(13 , HIGH) ; delay(100 ) ; digitalWrite(13 , LOW) ; delay(900 ) ; }

Скомпилируйте, загрузите программу. Вы увидите, что каждую секунду светодиод на плате помигивает. Разберёмся почему этот код приводит к ежесекундному миганию.

Каждое выражение - это приказ процессору сделать нечто. Выражения в рамках одного блока исполняются одно за другим, строго по порядку без всяких пауз и переключений. То есть, если мы говорим об одном конкретном блоке кода, его можно читать сверху вниз, чтобы понять что делается.

Теперь давайте поймём в каком порядке исполняются сами блоки, т.е. функции setup и loop . Не задумывайтесь пока что значат конкретные выражения, просто понаблюдайте за порядком.

    Как только Arduino включается, перепрошивается или нажимается кнопка RESET , «нечто» вызывает функцию setup . То есть заставляет исполняться выражения в ней.

    Как только работа setup завершается, сразу же «нечто» вызывает функцию loop .

    Как только работа loop завершается, сразу же «нечто» вызывает функцию loop ещё раз и так до бесконечности.

Если пронумеровать выражения по порядку, как они исполняются, получится:

void setup() { pinMode(13 , OUTPUT) ; ❶ } void loop() { digitalWrite(13 , HIGH) ; ❷ ❻ ❿ delay(100 ) ; ❸ ❼ … digitalWrite(13 , LOW) ; ❹ ❽ delay(900 ) ; ❺ ❾ }

Ещё раз напомним, что не стоит пытаться воспринимать всю программу, читая сверху вниз. Сверху вниз читается только содержимое блоков. Мы вообще можем поменять порядок объявлений setup и loop .

void loop() { digitalWrite(13 , HIGH) ; ❷ ❻ ❿ delay(100 ) ; ❸ ❼ … digitalWrite(13 , LOW) ; ❹ ❽ delay(900 ) ; ❺ ❾ } void setup() { pinMode(13 , OUTPUT) ; ❶ }

Результат от этого не изменится ни на йоту: после компиляции вы получите абсолютно эквивалентный бинарный файл.

Что делают выражения

Теперь давайте попробуем понять почему написанная программа приводит в итоге к миганию светодиода.

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

Это делается выражением в функции setup:

PinMode(13 , OUTPUT) ;

Выражения бывают разными: арифметическими, декларациями, определениями, условными и т.д. В данном случае мы в выражении осуществляем вызов функции . Помните? У нас есть свои функции setup и loop , которые вызываются чем-то, что мы назвали «нечто». Так вот теперь мы вызываем функции, которые уже написаны где-то.

Конкретно в нашем setup мы вызываем функцию с именем pinMode . Она устанавливает заданный по номеру пин в заданный режим: вход или выход. О каком пине и о каком режиме идёт речь указывается нами в круглых скобках, через запятую, сразу после имени функции. В нашем случае мы хотим, чтобы 13-й пин работал как выход. OUTPUT означает выход, INPUT - вход.

Уточняющие значения, такие как 13 и OUTPUT называются аргументами функции . Совершенно не обязательно, что у всех функций должно быть по 2 аргумента. Сколько у функции аргументов зависит от сути функции, от того как её написал автор. Могут быть функции с одним аргументом, тремя, двадцатью; функции могут быть без аргументов вовсе. Тогда для их вызова круглые скобка открывается и тут же закрывается:

NoInterrupts() ;

На самом деле, вы могли заметить, наши функции setup и loop также не принимают никакие аргументы. И загадочное «нечто» точно так же вызывает их с пустыми скобками в нужный момент.

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

Перейдём к функции loop:

void loop() { digitalWrite(13 , HIGH) ; delay(100 ) ; digitalWrite(13 , LOW) ; delay(900 ) ; }

Она, как говорилось, вызывается сразу после setup . И вызывается снова и снова как только сама заканчивается. Функция loop называется основным циклом программы и идеологически предназначена для выполнения полезной работы. В нашем случае полезная работа - мигание светодиодом.

Пройдёмся по выражениям по порядку. Итак, первое выражение - это вызов встроенной функции digitalWrite . Она предназначена для подачи на заданный пин логического нуля (LOW , 0 вольт) или логической единицы (HIGH , 5 вольт) В функцию digitalWrite передаётся 2 аргумента: номер пина и логическое значение. В итоге, первым делом мы зажигаем светодиод на 13-м пине, подавая на него 5 вольт.

Как только это сделано процессор моментально приступает к следующему выражению. У нас это вызов функции delay . Функция delay - это, опять же, встроенная функция, которая заставляет процессор уснуть на определённое время. Она принимает всего один аргумент: время в миллисекундах, которое следует спать. В нашем случае это 100 мс.

Пока мы спим всё остаётся как есть, т.е. светодиод продолжает гореть. Как только 100 мс истекают, процессор просыпается и тут же переходит к следующему выражению. В нашем примере это снова вызов знакомой нам встроенной функции digitalWrite . Правда на этот раз вторым аргументом мы передаём значение LOW . То есть устанавливаем на 13-м пине логический ноль, то есть подаём 0 вольт, то есть гасим светодиод.

После того, как светодиод погашен мы приступаем к следующему выражению. И снова это вызов функции delay . На этот раз мы засыпаем на 900 мс.

Как только сон окончен, функция loop завершается. По факту завершения «нечто» тут же вызывает её ещё раз и всё происходит снова: светодиод поджигается, горит, гаснет, ждёт и т.д.

Если перевести написанное на русский, получится следующий алгоритм:

    Поджигаем светодиод

    Спим 100 миллисекунд

    Гасим светодиод

    Спим 900 миллисекунд

    Переходим к пункту 1

Таким образом мы получили Arduino с маячком, мигающим каждые 100 + 900 мс = 1000 мс = 1 сек.

Что можно изменить

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

Вы можете подключить внешний светодиод или другое устройство, которым нужно «мигать» на другой пин. Например, на 5-й. Как в этом случае должна измениться программа? Мы должны всюду, где обращались к 13-му пину заменить номер на 5-й:

Компилируйте, загружайте, проверяйте.

Что нужно сделать, чтобы светодиод мигал 2 раза в секунду? Уменьшить время сна так, чтобы в сумме получилось 500 мс:

void setup() { pinMode(5 , OUTPUT) ; } void loop() { digitalWrite(5 , HIGH) ; delay(50 ) ; digitalWrite(5 , LOW) ; delay(450 ) ; }

Как сделать так, чтобы светодиод при каждом «подмигивании» мерцал дважды? Нужно поджигать его дважды с небольшой паузой между включениями:

void setup() { pinMode(5 , OUTPUT) ; } void loop() { digitalWrite(5 , HIGH) ; delay(50 ) ; digitalWrite(5 , LOW) ; delay(50 ) ; digitalWrite(5 , HIGH) ; delay(50 ) ; digitalWrite(5 , LOW) ; delay(350 ) ; }

Как сделать так, чтобы в устройстве были 2 светодиода, которые мигали бы каждую секунду поочерёдно? Нужно общаться с двумя пинами и работать в loop то с одним, то с другим:

void setup() { pinMode(5 , OUTPUT) ; pinMode(6 , OUTPUT) ; } void loop() { digitalWrite(5 , HIGH) ; delay(100 ) ; digitalWrite(5 , LOW) ; delay(900 ) ; digitalWrite(6 , HIGH) ; delay(100 ) ; digitalWrite(6 , LOW) ; delay(900 ) ; }

Как сделать так, чтобы в устройстве были 2 светодиода, которые переключались бы на манер железнодорожного светофора: горел бы то один то другой? Нужно просто не выключать горящий светодиод тут же, а дожидаться момента переключения:

void setup() { pinMode(5 , OUTPUT) ; pinMode(6 , OUTPUT) ; } void loop() { digitalWrite(5 , HIGH) ; digitalWrite(6 , LOW) ; delay(1000 ) ; digitalWrite(5 , LOW) ; digitalWrite(6 , HIGH) ; delay(1000 ) ; }

Можете проверить другие идеи самостоятельно. Как видите, всё просто!

О пустом месте и красивом коде

В языке C++ пробелы, переносы строк, символы табуляции не имеют большого значения для компилятора. Там где стоит пробел, может быть перенос строки и наоборот. На самом деле 10 пробелов подряд, 2 переноса строки и ещё 5 пробелов - это всё эквивалент одного пробела.

Пустое пространство - это инструмент программиста, с помощью которого можно или сделать программу понятной и наглядной, или изуродовать до неузнаваемости. Например, вспомним программу для мигания светодиодом:

void setup() { pinMode(5 , OUTPUT) ; } void loop() { digitalWrite(5 , HIGH) ; delay(100 ) ; digitalWrite(5 , LOW) ; delay(900 ) ; }

Мы можем изменить её так:

void setup( ) { pinMode(5 , OUTPUT) ; } void loop () { digitalWrite(5 ,HIGH) ; delay(100 ) ; digitalWrite(5 ,LOW) ; delay(900 ) ; }

Всё, что мы сделали - немного «поработали» с пустым пространством. Теперь можно наглядно видеть разницу между стройным кодом и нечитаемым.

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

1. Всегда, при начале нового блока между { и } увеличивайте отступ. Обычно используют 2 или 4 пробела. Выберите одно из значений и придерживайтесь его всюду.

Плохо:

void loop() { digitalWrite(5 , HIGH) ; delay(100 ) ; digitalWrite(5 , LOW) ; delay(900 ) ; }

Хорошо:

void loop() { digitalWrite(5 , HIGH) ; delay(100 ) ; digitalWrite(5 , LOW) ; delay(900 ) ; }

2. Как и в естественном языке: ставьте пробел после запятых и не ставьте до.

Плохо:

DigitalWrite(5 ,HIGH) ; digitalWrite(5 , HIGH) ; digitalWrite(5 ,HIGH) ;

Хорошо:

DigitalWrite(5 , HIGH) ;

3. Размещайте символ начала блока { на новой строке на текущем уровне отступа или в конце предыдущей. А символ конца блока } на отдельной строке на текущем уровне отступа:

Плохо:

void setup() { pinMode(5 , OUTPUT) ; } void setup() { pinMode(5 , OUTPUT) ; } void setup() { pinMode(5 , OUTPUT) ; }

Хорошо:

void setup() { pinMode(5 , OUTPUT) ; } void setup() { pinMode(5 , OUTPUT) ; }

4. Используйте пустые строки для разделения смысловых блоков:

Хорошо:

Ещё лучше:

void loop() { digitalWrite(5 , HIGH) ; delay(100 ) ; digitalWrite(5 , LOW) ; delay(900 ) ; digitalWrite(6 , HIGH) ; delay(100 ) ; digitalWrite(6 , LOW) ; delay(900 ) ; }

О точках с запятыми

Вы могли заинтересоваться: зачем в конце каждого выражения ставится точка с запятой? Таковы правила C++. Подобные правила называются синтаксисом языка . По символу; компилятор понимает где заканчивается выражение.

Как уже говорилось, переносы строк для него - пустой звук, поэтому ориентируется он на этот знак препинания. Это позволяет записывать сразу несколько выражений в одной строке:

void loop() { digitalWrite(5 , HIGH) ; delay(100 ) ; digitalWrite(5 , LOW) ; delay(900 ) ; }

Программа корректна и эквивалентна тому, что мы уже видели. Однако писать так - это дурной тон. Код гораздо сложнее читается. Поэтому если у вас нет 100% веских причин писать в одной строке несколько выражений, не делайте этого.

О комментариях

Одно из правил качественного программирования: «пишите код так, чтобы он был настолько понятным, что не нуждался бы в пояснениях». Это возможно, но не всегда. Для того, чтобы пояснить какие-то не очевидные моменты в коде его читателям: вашим коллегам или вам самому через месяц, существуют так называемые комментарии.

Это конструкции в программном коде, которые полностью игнорируются компилятором и имеют значение только для читателя. Комментарии могут быть многострочными или однострочными:

/* Функция setup вызывается самой первой, при подаче питания на Arduino А это многострочный комментарий */ void setup() { // устанавливаем 13-й пин в режим вывода pinMode(13 , OUTPUT) ; } void loop() { digitalWrite(13 , HIGH) ; delay(100 ) ; // спим 100 мс digitalWrite(13 , LOW) ; delay(900 ) ; }

Как видите, между символами /* и */ можно писать сколько угодно строк комментариев. А после последовательности / / комментарием считается всё, что следует до конца строки.

Итак, надеемся самые основные принципы составления написания программ стали понятны. Полученные знания позволяют программно управлять подачей питания на пины Arduino по определённым временны́м схемам. Это не так уж много, но всё же достаточно для первых экспериментов.

Вам понадобится

  • плата Arduino UNO;
  • кабель USB (USB A - USB B);
  • персональный компьютер;
  • светодиод;
  • пара соединительных проводов длиной 5-10 см;
  • при наличии - макетная плата (breadboard).
Arduino IDE

Загрузите среду разработки для Ардуино (Arduino IDE) с официального сайта для своей операционной системы (поддерживаются ОС Windows, Mac OS X, Linux). Можете выбрать установщик (Installer ), можете архив (ZIP file for non admin install ). Во втором случае программа просто запускается из папки, без установки. Скачанный файл содержит кроме среды разработки также драйверы для плат семейства Arduino.

Загружаем среду разработки Arduino IDE с официального сайта

2 Подключение Arduino к компьютеру

Подключите плату Arduino с помощью USB кабеля (типа USB-A - USB-B) к компьютеру. Должен загореться зелёный светодиод ON на плате.


Кабель "USB-A - USB-B" для подключения Arduino к компьютеру

3 Установка драйвера для Arduino

Установите драйвер для Arduino. Рассмотрим вариант установки на операционную систему Windows. Для этого дождитесь, когда операционная система предложит установить драйвер. Откажитесь. Нажмите клавиши Win + Pause , запустите Диспетчер устройств . Найдите раздел «Порты (COM и LPT)» . Увидите там порт с названием Arduino UNO (COMxx) . Кликните правой кнопкой мыши на нём и выберите Обновить драйвер . Укажите операционной системе расположение драйвера. Он находится в поддиректории drivers в той папке, которую мы только что скачали.

Запомните порт, к которому подключена плата Arduino. Чтобы узнать номер порта, запустите диспетчер устройств и найдите раздел «Порты (COM и LPT)». В скобках после названия платы будет указан номер порта. Если платы нет в списке, попробуйте отключить её от компьютера и, выждав несколько секунд, подключить снова.

Arduino в диспетчере устройств Windows

4 Настройка Arduino IDE

Укажите среде разработки свою плату. Для этого в меню Инструменты Плата выберите Arduino UNO .


Выбираем плату Arduino UNO в настройках

Укажите номер COM-порта, к которому подключена плата Arduino: Инструменты Порт .


Задаём последовательный порт, к которому подключена плата Arduino

5 Открываем пример программы

Среда разработки уже содержит в себе множество примеров программ для изучения работы платы. Откройте пример "Blink": Файл Образцы 01.Basics Blink .Кстати, программы для Ардуино называются «скетчи».


Открываем пример скетча для Arduino

6 Сборка схемы со светодиодом

Отключите Arduino от компьютера. Соберите схему, как показано на рисунке. Обратите внимание, что короткая ножка светодиода должна быть соединена с выводом GND, длинная - с цифровым пином "13" платы Arduino. Удобно пользоваться макетной платой, но при её отсутствии соедините провода скруткой.

Цифровой пин "13" имеет встроенный резистор на плате. Поэтому при подключении светодиода к плате внешний токоограничивающий резистор использовать не обязательно. При подключении светодиода к любым другим выводам Ардуино использование резистора обязательно, иначе сожжёте светодиод, а в худшем случае - порт Ардуино, к которому подключён светодиод!


Схема подключения светодиода к Arduino в память Ардуино

Теперь можно загрузить программу в память платы. Подключите плату к компьютеру, подождите несколько секунд, пока происходит инициализация платы. Нажмите кнопку Загрузить , и Ваш скетч запишется в память платы Arduino. Светодиод должен начать весело подмигивать вам с периодичностью 2 секунды (1 секунду горит, 1 выключен). Ниже приведён код нашей первой программы для Ардуино.

void setup() { // блок инициализации pinMode(13, OUTPUT); // задаём пин 13 в качестве выхода. } void loop() { // цикл, который повторяется бесконечно, пока включена плата: digitalWrite(13, HIGH); // подаём на 13 вывод высокий уровень - зажигаем светодиод delay(1000); // на 1000 мсек = 1 сек. digitalWrite(13, LOW); // подаём на 13 вывод низкий уровень - гасим светодиод delay(1000); // на 1 сек. } // далее цикл повторяется

Почитайте комментарии в тексте программы - их достаточно чтобы разобраться с нашим первым экспериментом. Сначала описываем блок инициализации setup() , в котором задаём начальные значения переменных и функции выводов Arduino. Далее следует бесконечный цикл loop() , который повторяется снова и снова, пока на плату подаётся питание. В этом цикле мы выполняем все необходимые действия. В данном случае - зажигаем и гасим светодиод. Оператор delay() задаёт длительность выполнения (в миллисекундах) предшествующего оператора. Оператор digitalWrite() указывает Ардуино, на какой вывод подать напряжение, и какой именно уровень напряжения.Ваш первый скетч готов!

В сети есть множество сайтов, посвящённых работе с платами семейства Arduino. Читайте, осваивайте, не бойтесь экспериментировать и познавать новое! Это увлекательное и полезное занятие, которое принесёт вам много удовольствия.

Обратите внимание

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