Arduino и совместимые языки программирования


Содержание

Язык программирования Ардуино C++

Язык программирования Arduino является разновидностью языка C++. Смотрите на нашем сайте справочник с описанием основных функций языка Arduino с примерами.

Подробно Arduino язык программирования для начинающих представлен в таблице далее. Микроконтроллер Arduino программируется на специальном языке программирования, основанном на C/C ++. Язык программирования Arduino является разновидностью C++, другими словами, не существует отдельного языка программирования для Arduino. Скачать книгу PDF можно в конце страницы.

В Arduino IDE все написанные скетчи компилируются в программу на языке C/C++ с минимальными изменениями. Компилятор Arduino IDE значительно упрощает написание программ для этой платформы и создание устройств на Ардуино становится намного доступней людям, не имеющих больших познаний в языке C/C++. Дадим далее небольшую справку с описанием основных функций языка Arduino с примерами.

Подробный справочник языка Ардуино

Язык можно разделить на четыре раздела: операторы, данные, функции и библиотеки.

Операторы

Язык Arduino Пример Описание
setup() void setup ()
<
pinMode (3, INPUT );
>
Функция используется для инициализации переменных, определения режимов работы выводов на плате и т.д. Функция запускается только один раз, после каждой подачи питания на микроконтроллер.
loop() void loop ()
<
digitalWrite (3, HIGH );
delay(1000);
digitalWrite (3, LOW );
delay(1000);
>
Функция loop крутится в цикле, позволяя программе совершать вычисления и реагировать на них. Функции setup() и loop() должны присутствовать в каждом скетче, даже если эти операторы в программе не используются.

Управляющие операторы

if
if (x > 100) digitalWrite (3, HIGH );
if (x digitalWrite (3, LOW );
Оператор if используется в сочетании с операторами сравнения (==, !=, ) и проверяет, достигнута ли истинность условия. Например, если значение переменной x больше 100, то включается светодиод на выходе 13, если меньше — светодиодвыключается.
if..else
if (x > 100) digitalWrite (3, HIGH );
else digitalWrite (3, LOW );
Оператор else позволяет cделать проверку отличную от указанной в if, чтобы осуществлять несколько взаимо исключающих проверок. Если ни одна из проверок не получила результат ИСТИНА, то выполняется блок операторов в else.
switch…case
switch (x)
<
case 1: digitalWrite (3, HIGH );
case 2: digitalWrite (3, LOW );
case 3: break ;
default : digitalWrite (4, HIGH );
>
Подобно if, оператор switch управляет программой, позволяя задавать действия, которые будут выполняться при разных условиях. Break является командой выхода из оператора, default выполняется, если не выбрана ни одна альтернатива.
for void setup ()
<
pinMode (3, OUTPUT );
>
void loop ()
<
for ( int i=0; i analogWrite (3, i);
delay(10);
>
>
Конструкция for используется для повторения операторов, заключенных в фигурные скобки. Например, плавное затемнение светодиода. Заголовок цикла for состоит из трех частей: for (initialization; condition; increment) — initialization выполняется один раз, далее проверяется условие condition, если условие верно, то выполняется приращение increment. Цикл повторяется пока не станет ложным условие condition.
while void loop ()
<
while (x Serial.println (x);
delay (200);
>
>
Оператор while используется, как цикл, который будет выполняться, пока условие в круглых скобках является истиной. В примере оператор цикла while будет повторять код в скобках бесконечно до тех пор, пока x будет меньше 10.
do…while void loop ()
<
do
<
x = x + 1;
delay (100);
Serial.println (x);
>
while (x delay (900);
>
Оператор цикла do…while работает так же, как и цикл while. Однако, при истинности выражения в круглых скобках происходит продолжение работы цикла, а не выход из цикла. В приведенном примере, при x больше 10 операция сложения будет продолжаться, но с паузой 1000 мс.
break
continue
switch (x)
<
case 1: digitalWrite (3, HIGH );
case 2: digitalWrite (3, LOW );
case 3: break ;
case 4: continue ;
default : digitalWrite (4, HIGH );
>
Break используется для принудительного выхода из циклов switch, do, for и while, не дожидаясь завершения цикла.
Оператор continue пропускает оставшиеся операторы в текущем шаге цикла.

Синтаксис

;
(точка с запятой)

digitalWrite (3, HIGH );
Точка с запятой используется для обозначения конца оператора. Забытая в конце строки точка с запятой приводит к ошибке при компиляции.
<>
(фигурные скобки)
void setup ()
<
pinMode (3, INPUT );
>
Открывающая скобка “<” должна сопровождаться закрывающей скобкой “>”. Непарные скобки могут приводить к скрытым и непонятным ошибкам при компиляции скетча.
//
(комментарий)
x = 5; // комментарий Комментарии используются для напоминания, как работает программа. Они игнорируются компилятором и не экспортируются в процессор, не занимая место в памяти микроконтроллера.
#define #define ledPin 3 Директива #define позволяет дать имя константе. Директива служит исключительно для удобства и улучшения читаемости программы.
#include // библиотека для серво
#include Servo .h>
Директива #include используется для включения сторонних библиотек в скетч. Обратите внимание, что директивы #include и #define, не требуют точки запятой.

Типы данных

boolean boolean val = false ; Переменная boolean может принимать значение — true или false. Каждая переменная типа boolean занимает один байт в памяти микроконтроллера.
char // оба значения эквивалентны
char val = ‘A’;
char val = ’65’;
Тип данных char хранит символьное значение и занимает в памяти 1 байт. Символы пишутся в одинарных кавычках, например: ‘A’, но в памяти символы хранятся в виде чисел.
byte byte val = 255; byte — без знаковый тип данных для хранения чисел в диапазоне от 0 до 255. Переменная занимает в памяти 1 байт.
int int val = 32767; Тип данных для хранения целых чисел. Переменная типа int хранит 16-битные значения в диапазоне от -32768 до 32767.
unsigned int unsigned int val = 65535; Переменная типа unsigned int также может хранить двухбайтовые значения. Но вместо отрицательных чисел хранит только положительные значения в большом диапазоне от 0 до 65535.
float float val = 25.1547; Переменная типа float служит для хранения чисел с десятичным разделителем. Числа с плавающей точкой позволяют более точно описать аналоговые величины, чем целые числа. Точность дробных чисел составляет 6-7 знаков — это общее количество цифр, а не количество цифр после запятой.

Программирование Arduino намного проще и понятнее, чем язык C++.

Например.

На языке программирования Arduino включить в скетче последовательный порт на скорости 9600 бит в секунду можно всего лишь одной строчкой:

При использовании C/C++ нам бы пришлось долго разбираться с документацией на микроконтроллер и написать в скетче нечто подобное:

UBRR0H = ((F_CPU / 16 + 9600 / 2) / 9600 — 1) >> 8;
UBRR0L = ((F_CPU / 16 + 9600 / 2) / 9600 — 1);
sbi(UCSR0B, RXEN0);
sbi(UCSR0B, TXEN0);
sbi(UCSR0B, RXCIE0);

Почему не стоит использовать Arduino для обучения программированию

Hack van de dam

Я бы мог начать статью словами «Почему Arduino – отстой» или «Почему Arduino – барахло», что привлекло бы огромный трафик к странице в Интернете. Но я не сделал этого, потому что это просто неправда. Arduino – не «барахло», и сам по себе не один из представителей этого семейства ничем не плох. Просто это не самый лучший инструмент для обучения людей программированию, что зачастую вводит их в заблуждение. Позвольте мне объяснить вам, почему.

Что такое Arduino?

«Arduino – это открытая платформа для прототипирования электроники, основанная на гибком, простом в использовании оборудовании и программном обеспечении. Она предназначена для новичков, профессионалов и все тех, кто заинтересован в создании интерактивных объектов или сред», – именно так представлена Arduino своими разработчиками [1]. И они правы. Для создания интерактивных объектов или сред проект Arduino подходит идеально. Вам доступно невообразимое количество примеров кода, вы можете с легкостью считывать датчики (работа с которыми в обычном случае, даже при наличии опыта программирования, может занимать от нескольких часов до нескольких дней), и получаете доступ к большой базе пользователей для обсуждения вопросов. Создание интерактивных объектов – это, прежде всего, взаимодействие с человеком. Подключите датчик к исполнительному устройству, создайте новые алгоритмы и экспериментируйте… Однако для обучения программированию или использования возможностей встраиваемой электроники такой подход плох.

Именно в этом и заключается мое недовольство Arduino, когда речь заходит о начальном обучении программированию. Путь изучения микроконтроллеров может быть непростым, но он должен опираться на силу этих маленьких существ. Использование Arduino для изучения программирования подобно использованию Макдональдс для изучения кулинарии; вы получаете еду очень быстро, но не получаете навыков самостоятельного приготовления пищи. Когда вам нужно быстро перекусить, Макдональдс –вполне хороший вариант (спорная мысль, но лишь иллюстрирующая мою точку зрения), но это уж точно не кулинарный класс.

Пять причин, почему (не в порядке важности)

1. Отсутствие проектного пространства, разбиения кода и приличной интегрированной среды разработки

Для меня это большая неприятность. Я понимаю, что не следует перегружать новичков переизбытком опций, но среда Arduino IDE выглядит как насмешка над приличной записью кода. Может быть, нужно преклонить колени, чтобы уговорить их сделать цветовое выделение переменных, но для начала хотя бы дайте возможность просмотра их определений. Посмотрите, как это выглядит в Code::Blocks [2] на Рисунке 1. Другой момент состоит в том, что весь код необходимо писать в одном «эскизе» (скетче). Если нужно написать серьезную программу с функциями, которые будут использоваться позже, то хорошая практика (или даже похвальная) заключается в создании модульных фрагментов кода. Запись всего в один длинный файл идет в разрез с этой целью и стимулирует написание неструктурированного кода, называемого «макароны», с запутанным порядком выполнения и определениями переменных везде и нигде.

Рисунок 1. Опция поиска определений переменных и их
реализация в среде Code::Blocks.

Общие соображения, касающиеся того, почему так важны заголовочные файлы, очень хорошо изложены на сайте [3]. Кроме того, замечательное руководство по модульному программированию в Си (на английском языке) можно найти в (почитайте посты на форуме). Чтобы получить четкое представление о том, как это делается правильно, загляните, пожалуйста, в подробное руководство по заголовочным файлам в Си, выпущенном MIT [4] (на английском языке):

«Правильно организованная программа на Си имеет хороший выбор модулей и правильно сконструированные заголовочные файлы, которые упрощают понимание и доступ к функциям модуля. Кроме того, это может гарантировать, что в программе используются одинаковые объявления и определения для всех ее компонентов. Это важно, поскольку в соблюдении Правила Одного Определения компиляторам и компоновщикам нужна помощь».

Написанию модульного кода отлично помогает возможность поиска определений и реализаций файлов. Но Arduino IDE не обеспечивает простых способов создания других Си- и h-файлов, а также не позволяет искать определения в своих собственных файлах кода. (Кто сможет сказать, что на самом деле делает функция «digitalWrite»)? Изучая программирование на Си, пожалуйста, научитесь правильно использовать заголовочные файлы.

2. Плохие уровни абстракций, плохие именования

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

  1. analogWrite(int):
    Функция «записывает аналоговое значение (ШИМ) в порт микроконтроллера». Вы скажете: «Что? ШИМ стал аналоговым?». Он настолько же аналоговый, насколько аналоговая информация на компакт-диске. Сигнал широтно-импульсной модуляции НЕ аналоговый; частота ШИМ Arduino равна «приблизительно» 490 Гц, и нет никаких указаний касающихся того, какой должна быть комбинация RC, чтобы сделать аналоговый сигнал. Это вводит в заблуждение. Сказанного достаточно для управления светодиодом, но это не «аналоговый сигнал», который можно было бы использовать в качестве уставки для аналоговой системы управления.
  2. И конечно, если уж вы предоставили возможность генерировать сигнал ШИМ, то хотя бы позвольте установить его частоту.
  3. pinMode():
    Я должен признать, что ошибка уже исправлена, но некоторое время назад были доступы только значения «INPUT» и «OUTPUT». Если бы потребовалось получить вход с подтягивающим резистором, пришлось бы еще выполнить функцию digitalWrite() для порта, который только что был сделан входом. Те, кто знают архитектуру AVR, понимают, что тем самым производится запись в регистры DDRx и PORTx, но для новичков включение подтягивающего резистора записью в порт, который только что был сделан входом, выглядит очень странной. Сейчас все исправлено, но для этого потребовалось слишком много времени; функция pinMode() уже использовалась, и нуждалась только в этой дополнительной опции. Здесь не только не было абстрагирования от «железа», но эта функция создавала код, который не мог нормально переноситься на другие микроконтроллеры. (Вероятно, поэтому функция была исправлена в момент появления платы Arduino Due).
  4. Переменные:
    Зачем использовать все типы char, int, long и т.д.? Использование stdint (uint8_t, uint16_t, int32, …) даст более правильное понимание и более переносимый код. Тип int – это 16-битная величина для компилятора AVR-GCC, тогда как для компилятора GNU ARM – 32-битная…
  5. Отсутствие абстракций и свойств системы:
    progmem. Очень многие используют для отладки сроковые последовательности, которые сохраняются в ОЗУ. Фиксированные строки могут храниться во Flash-памяти и считываться из нее; эти функции присутствуют в пакете avr-libc. Поэтому я думаю, что 90% людей, сказавших «память Arduino переполнилась», были бы рады добавлению какого-нибудь ключевого слова.

3. Ужасная документация

Документация по функциям в Arduino ничего не сообщает о том, какие в них используются периферийные модули (не говоря уж о более глубоком уровне), скрывая это от обычных пользователей. Раньше я использовал openFrameworks. По крайней мере, с их средой разработки можно в коде посмотреть, как реализуются те или иные функции. С Arduino вы работаете вслепую. Можно ли обращаться к таймеру из функции servo()? Будет ли отправка строки в последовательный порт блокировать выполнение программы? Будет ли функция analogWrite() влиять на другие функции времени? В руководстве по Arduino вы об этом не прочитаете.

В справочнике по Arduino также описывается её «язык программирования». В базовой структуре используются некоторые функции Си и Си++, описанные, опять же, непонятно. «Arduino» – не тот язык, который вы не постеснялись бы указать в своем резюме. Чтобы считаться программистом, надо уметь программировать на Си! Сходства и различия этих функций неясны, что приводит к путанице при переходе на другие микроконтроллеры или в среды разработки ANSI-C. Где используются классы? Где используются структуры? Я понимаю, что Arduino не хочет отпугивать новых пользователей, но как же они станут «продвинутыми» пользователями?

4. Отсутствие доступа к периферии и напрасная трата ресурсов

Я знаю, что, смешав скетч с «реальным» Си и используя регистры Atmel, вы можете получить доступ к периферии Arduino и микроконтроллера. Но, если уж вы продвинулись так далеко, пожалуйста, доставьте себе удовольствие и напишите собственный код, где вы будете знать, какая периферия используется и каким образом. Начиная программировать микроконтроллеры, я был поражен скоростью их работы (PIC, 8 МГц). Написание кода, оптимизированного для периферии, использование прерываний для параллельного выполнения максимально возможного числа задач – все это показало мне, какая сила заключена во встраиваемых устройствах и компьютерах. Поэтому, с моей точки зрения, использование Arduino для освоения программирования встраиваемых систем отнимает бесценную возможность научиться созданию по настоящему эффективных и мощных приложений.

У меня на работе многие пытаются писать на Arduino циклы управления. Используя функцию micros(), они отмечают время начала функции loop(), выполняют свои задачи, а затем снова опрашивают функцию micros() для ожидания завершения времени цикла. Это крайне расточительное использование ресурсов микроконтроллера, которые могли бы быть полезными для добавления новых задач, или для процессов, которые не могут работать в одной системе отсчета времени. Одно лишь это делает mbed лучше Arduino. Реализация функции Ticker, хотя и не лишена недостатков, но, по крайней мере, использует синхронизацию на основе прерываний, оставляя основной цикл для «медленных» задач.

5. Отсутствие «реальной» отладки

Когда в Arduino использовался ATmega328, у разработчика не было порта отладки. Теперь появилась серия плат Due, и отладочные порты имеют микроконтроллеры Microchip (Atmel) от серии tiny (DebugWire) до серии XMEGA (PDI и JTAG), однако пользователям Arduino этот мощный набор инструментов по-прежнему недоступен. Думаю, что при использовании правильно настроенного отладчика время разработки приложений у меня снижается процентов на 30. Поэтому ARM интересен хотя бы тем, что может использовать реализацию OpenOCD, предоставляющую разработчику широкие возможности отладки и программирования. Несколько точек останова дают очень быструю индикацию выполняемого кода и возникающих ошибок. Меня приводят в восторг все новые наборы разработки ARM с интегрированным аппаратным отладчиком. Добавьте поддержку arm-gdb и OpenOCD, и вы на вершине! Настройка этих инструментов может оказаться немного затруднительной, но полностью стоит того, чтобы попытаться создать достойное встроенное приложение.

Какова же альтернатива?

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

  • Scratch [5]. Это веселый и легкий инструмент для детей и подростков, желающих освоить программирование, который даже поддерживает возможность разбиения кода. Конечно же, он не предназначен для встраиваемых систем, но для детей это хороший способ понять, что такое программа.
  • Mbed [6]. Онлайн компилятор с открытым кодом, поддерживающий множество модулей и плат на микроконтроллерах различных производителей, включая NXP, Analog Devices, STMicroelectronics, Nordic Semiconductor, Ublox, который отлично подходит для новичков, так как не требует установки инструментальных средств. С компилятором предлагается огромный архив примеров, которые можно легко импортировать в свой проект. Да, речь именно о проектах. Вам дается возможность полного контроля над исходным кодом и его структурой, включая онлайн управление версиями. Предоставляемый mbed код – это Си++, использующий классы и перегрузку операторов, что лично меня, воспитанного на ANSI-C, первоначально немного сбивало с толку, однако документация, которую вы тоже найдете в своем проекте, прозрачна и доступна. Использование периферии нельзя назвать простым, но можно косвенно использовать таймеры для генерирования прерываний по времени, и, опять же, все это хорошо документировано. Вам не нравятся онлайн сервисы? Хорошо, можно работать оффлайн. Единственный, на мой взгляд, недостаток mbed – отсутствие возможности отладки с использованием точек останова и наблюдения.
  • Компилятор AVR-GCC/WinAVR [7] с микроконтроллерами серии Xmega. Пакет программ AVR-GCC (с библиотеками avr-libc) имеет солидную репутацию и очень хорошую базу пользователей [8]. Причина, по которой я рекомендую серию Xmega, – это «фантастическая» документация. Правда, из-за того, что для каждого периферийного устройства есть отдельное указание по использованию, Atmel Studio имеет очень «раздутые» размеры, но зато предоставляет реальный набор мощных инструментов для разметки кода, отладки (точки останова) и симуляции (просмотр и изменение битов регистров периферии). При использовании отладчика Dragon (переоцененного) можно работать с устройствами, имеющими память программ до 32 Кбайт. Конечно, начинать с такого набора без каких-либо знаний в области программирования будет тяжело, но всегда можно найти информацию в Интернете или попросить помощи у знающего друга. При чтении указаний по применению у меня возникает ощущение, что можно создать систему, которая после настройки все будет делать самостоятельно: DMA будут отправлять полученные значения АЦП в память, система событий будет запускать таймеры для запуска ЦАП, и тому подобное. Поработать придется довольно много, но вы сделаете действительно встраиваемую систему. Это как самостоятельно приготовить суши вместо того, чтобы идти в Макдональдс…
  • Использовать отладочные платы Launchpad/STM32/… [9]. Другие ARM платы. И да, и нет… Конечно, ARM – это будущее, но начинать с этого, думаю, довольно сложно. Кроме того, при использовании бесплатных инструментальных наборов вам придется потратить уйму времени на их настройку. Правда, это полезно; оценочная плата с интегрированным отладчиком (8 евро за плату серии STM32F0 Discovery [10] – не сравнить с продуктами Atmel/Microchip), и еще что-то, и в своем резюме вы сможете указать, что работали с ARM. Однако документация в основном посредственная и пугающе объемная. Кроме того, набор опций в компиляторах и средах разработки настолько велик, что порой трудно разобраться, почему программа не компилируется.

Заключение

Arduino – отличный «фаст фуд программирования» – легкодоступный, дающий быстрый результат и иногда даже изящный. Но для того, чтобы узнать «как программировать» или «как добиться максимальной производительности микроконтроллеров», или же для использования в качестве первого шага Arduino не подходит. Для этого изучайте настоящую кулинарию; начинайте с нуля – с кипящей воды, затем кладите туда scratch, готовьте картофель с mBed и делйте суши с Atmel, чтобы в конечном итоге выйти на фристайл с отладочными платами ARM.

Ссылки

Перевод: Vadim по заказу РадиоЛоцман

Arduino: выбор платы, подключение и первая программа

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

Из чего состоит Arduino?

На аппаратном уровне это серия смонтированных плат, мозгом которых являются микроконтроллеры семейства AVR.

Платы имеют на борту всё необходимое для комфортной работы, но их функциональности часто бывает недостаточно. Чтобы сделать свой проект более интерактивным, можно использовать различные модули и платы расширений, совместимые с платформой Arduino. Сюда входят датчики (температуры, освещения, влаги, газа/дыма, атмосферного давления), устройства ввода (клавиатуры, джойстики, сенсорные панели) и вывода (сегментные индикаторы, LCD/TFT дисплеи, светодиодные матрицы).

На программном уровне платформа Arduino представляет собой бесплатную среду разработки Arduino IDE. Микроконтроллеры надо программировать на языке C++, с некоторыми отличиями и облегчениями, созданными для быстрой адаптации начинающих. Компиляцию программного кода и прошивку микроконтроллера среда разработки берёт на себя.

Существует также s4a.cat — сервис, базирующийся на Scratch, позволяющий более наглядно вести разработку на Arduino. Он подойдёт для обучения детей, а также если вы разово хотите создать простое устройство без изучения языка программирования Arduino и различных документаций. Для остальных же случаев лучше придерживаться традиционного процесса разработки.

Нужно ли уметь паять?

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

Макетная плата на 400 отверстий (имеются шины питания по бокам). Источник

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

Набор для изучения Arduino. Источник

Какие бывают платы

По производителю

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

На примере самой популярной платы Arduino UNO:

    Оригинальная плата. Поставляется только в фирменной коробке, имеет логотип компании, на портах платы — маркировка. Цена от производителя 20 €.

Оригинальная плата Arduino UNO. Источник

Плата Arduino UNO от стороннего производителя. Источник

По назначению

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

Различные платы Arduino. Источник

Самые популярные из них:

  • Arduino Nano — различие с UNO только в конструктивном исполнении. Nano меньше.
  • Arduino Mega — плата на базе мощного микроконтроллера. Имеет большое количество портов.
  • Arduino Micro — имеет встроенную поддержку USB-соединения, а потому может использоваться как H >

Установка ПО

После выбора необходимой платы нужно установить бесплатную среду разработки Arduino IDE, которую можно найти на официальном сайте, а также, по необходимости, драйвер CH340.

Недавно открылась облачная платформа Arduino Create, которая покрывает большинство этапов разработки (от идеи до сборки). Вам не нужно ничего устанавливать на свой компьютер, всё необходимое платформа берёт на себя. В первую очередь — онлайн редактор кода.

В Arduino Create имеется доступ к обучающим материалам, проектам. Вы сможете общаться с профессионалами и помогать новичкам.

Среда разработки Arduino IDE

Особенности программирования на платформе Arduino

Термины

Программный код для Arduino принято называть скетчами (англ. sketches). У скетчей есть два основных метода: setup() и loop() . Первый метод автоматически вызывается после включения/сброса микроконтроллера. В нём происходит инициализация портов и различных модулей, систем. Метод loop() вызывается в бесконечном цикле на протяжении всей работы микроконтроллера.

Порты — неотъемлемая часть любого микроконтроллера. Через них происходит взаимодействие микроконтроллера с внешними устройствами. С программной стороны порты называются пинами. Любой пин может работать в режиме входа (для дальнейшего считывания напряжения с него) или в режиме выхода (для дальнейшей установки напряжения на нём).

Любой пин работает с двумя логическими состояниями: LOW и HIGH , что эквивалентно логическому нулю и единице соответственно. У некоторых портов есть встроенный АЦП, что позволяет считывать аналоговый сигнал со входа (например, значение переменного резистора). Также некоторые пины могут работать в режиме ШИМ (англ. PWM), что позволяет устанавливать аналоговое напряжение на выходе. Обычно функциональные возможности пина указываются на маркировке самой платы.

Основные функции

Для базовой работы с платой в библиотеке Arduino есть следующие функции:

  • pinMode(PIN, type) — указывает назначение конкретного пина PIN (значение type INPUT — вход, OUTPUT — выход);
  • digitalWrite(PIN, state) — устанавливает логическое состояние на выходе PIN ( state LOW — 0, HIGH — 1);
  • digitalRead(PIN) — возвращает логическое состояние со входа PIN ( LOW — 0, HIGH — 1);
  • analogWrite(PIN, state) — устанавливает аналоговое напряжение на выходе PIN ( state в пределах от 0 до 255);
  • analogRead(PIN) — возвращает значение аналогового уровня сигнала со входа PIN (пределы зависят от разрядности встроенного АЦП. Обычно разрядность составляет 10 бит, следовательно, возвращаемое значение лежит в пределах от 0 до 1023);
  • delay(ms) — приостанавливает исполнение скетча на заданное количество миллисекунд;
  • millis() — возвращает количество миллисекунд после момента запуска микроконтроллера.

В остальном процесс программирования на Arduino такой же, как на стандартном C++.

Пишем первую программу

Вместо всем привычных Hello World’ов в Arduino принято запускать скетч Blink, который можно найти в ФайлПримеры01.BasicsBlink. Там же можно найти множество других учебных скетчей на разные темы.

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

Рассмотрим скетч Blink:

Прошивка

После написания необходимо «залить» скетч на микроконтроллер. Как уже говорилось, платформа Arduino берёт весь процесс прошивки микроконтроллера на себя — вам лишь необходимо подключить плату к компьютеру.

Перед прошивкой микроконтроллера нужно выбрать вашу плату из списка в IDE. Делается это во вкладке ИнструментыПлата. Большинство существующих плат уже там есть, но при необходимости можно добавлять другие через Менеджер Плат.

После этого нужно подключить плату Arduino к любому USB-порту вашего компьютера и выбрать соответствующий порт во вкладке ИнструментыПорт.

Теперь можно приступать к прошивке микроконтроллера. Для этого достаточно нажать кнопку Загрузка, либо зайти на вкладку СкетчЗагрузка. После нажатия начнётся компиляция кода, и в случае отсутствия ошибок компиляции начнётся прошивка микроконтроллера. Если все этапы выполнены правильно, на плате замигает светодиод с периодом и интервалом в 1 сек.

Обмен данными с компьютером

У всех плат Arduino есть возможность обмена информацией с компьютером. Обмен происходит по USB-кабелю — никаких дополнительных «плюшек» не требуется. Нам нужен класс Serial , который содержит все необходимые функции. Перед работой с классом необходимо инициализировать последовательный порт, указав при этом скорость передачи данных (по умолчанию она равна 9600). Для отправки текстовых данных в классе Serial существуют небезызвестные методы print() и println() . Рассмотрим следующий скетч:

В Arduino IDE есть Монитор порта. Запустить его можно через ИнструментыМонитор порта. После его открытия убедитесь, что Монитор работает на той же скорости, которую вы указали при инициализации последовательного порта в скетче. Это можно сделать в нижней панели Монитора. Если всё правильно настроено, то ежесекундно в Мониторе должна появляться новая строка « T for Tproger ». Обмен данными с компьютером можно использовать для отладки вашего устройства.

Информацию на стороне компьютера можно не только получать, но и отправлять. Для этого рассмотрим следующий скетч:

Прошиваем микроконтроллер и возвращаемся в Монитор порта. Вводим в верхнее поле 1 и нажимаем Отправить. После этого на плате должен загореться светодиод. Выключаем светодиод, отправив с Монитора 0 . Если же отправить символ T , в ответ мы должны получить строку « proger ».

Таким способом можно пересылать информацию с компьютера на Arduino и обратно. Подобным образом можно реализовать связь между двумя Arduino.

А как подключать модули?

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

Однако большое количество датчиков являются бинарными, т. е. считывать информацию с них можно простой функцией digitalRead() .

alex-day › Блог › Arduino: Программирование без программирования

На сегодняшний день Ардуино является одним из самых простых способов освоить микроконтроллеры: благодаря простому интерфейсу, простоте (можно сказать даже примитивности) «языка Ардуино» программирование микроконтроллеров становится доступно даже школьникам. Однако всегда находятся энтузиасты старающиеся улучшить даже то, что и так кажется простым. В данном случае речь идет о «визуальном программировании», т.е. графических средах позволяющих не писать программы, а рисовать их.
Итак встречаем: Scratch, ArduBloсk и FLProg — три попытки сделать так, чтобы программирование стало доступно даже дошкольникам :)

Scratch
Страница проекта — s4a.cat/
В 2003 году группа исследователей под руководством Митчела Резника из MIT Media Lab решила сделать общедоступный язык программирования. В результате через 4 года появился Scratch — «среда для обучения школьников программированию».
В этой среде можно создавать и играть с различными объектами, видоизменять их вид, перемещать их по экрану, устанавливать формы взаимодействия между ними. Это объектно-ориентированная среда, в основе которой лежит принцип конструктора LEGO и в которой программы собираются из разноцветных блоков-кирпичиков команд точно так же, как собираются из разноцветных кирпичиков конструкторы Лего.
Среда русифицирована, для нее есть много инструкций и руководств на русском языке. Проекты, создаваемые в Scratch, выкладываются на сайте проекта scratch.mit.edu/, все они доступны для скачивания и использования. Среда доступна для работы ребенка с раннего возраста, немного умеющего читать и пользоваться мышью.
Основа среды – блоки команд, разделенные на несколько групп: движение, внешность, звук, перо, контроль, сенсоры, операторы, переменные. Встроенная «рисовалка» позволяет нарисовать нужный объект, а блоки команд (их нужно перетаскивать мышью) – задать программу действий, в том числе с применением условных операторов и циклов. Конечно, у Scratch отсутствует масса функций реального языка программирования, но и имеющихся достаточно для создания довольно сложных программ и игр. В самой программе имеется довольно большая база уже готовых нарисованных животных, домов, предметов и так далее, а кроме того, в качестве образца можно использовать любой из тысяч опубликованных в сети интернет программ примеров, сделанных взрослыми и детьми.
В 2008 году появился проект Scratch для Arduino (в оригинале: Scratch For Arduino или сокращённо — S4A) — это модификация Scratch, которая предоставляет возможность простого визуального программирования контроллера Arduino, а так же содержит новые блоки для управления датчиками и исполнительными механизмами, подключаемыми к Arduino.
S4A представляет собой скетч прошивки s4a.cat/downloads/S4AFirmware15.ino, которая загружается в Ардуино, делает его исполнительным устройством, программа выполняется на компьютере, Ардуино её физически выполняет, передавая сигналы на выходы платы. Ардуино в этом случае через Serial-соединение получает от Скретча команды какие порты в какой уровень установить и передает на ПК измеренные уровни с входов.
Более подробно можно узнать либо на странице проекта, либо посмотрев видео от Амперки — www.youtube.com/playlist?…OzZQGDFdoRfldtqbmNU6a-PIp

ArduBloсk
Страница проекта -blog.ardublock.com/
Имен разработчиков и их локализации мне найти не удалось, но данный проект активно продвигается разработчиком плат sparkfun, поэтому ИМХО это их проект.
Ardublock это графический язык программирования для Arduino, предназначенный для непрограммистов и простой в использовании. В отличии от Скретча ArduBloсk встраивается в среду Arduino IDE и генерит программый скетч, загружаемый в МК. Причем, после закачки в платформу, исполнение кода будет происходить автономно, т.е. не требуется непосредственное управление с компьютера по проводной или беспроводной связи.
Среди руссоязычного сообщества проект известен благодаря учителю-энтузиасту из Лабинска Александру Сергеевичу Аликину — geektimes.ru/post/258834/

FLProg
Страница проекта — flprog.ru/
Проект развивается силами одного человека — Сергея Глушенко. Основная идея заключается в том, чтобы адаптировать применяющиеся в области программирования промышленных контроллеров языки FBD и LAD к Ардуино.

FBD (Function Block Diagram) — графический язык программирования стандарта МЭК 61131-3. Программа образуется из списка цепей, выполняемых последовательно сверху вниз. При программировании используются наборы библиотечных блоков. Блок (элемент) — это подпрограмма, функция или функциональный блок (И, ИЛИ, НЕ, триггеры, таймеры, счётчики, блоки обработки аналогового сигнала, математические операции и др.). Каждая отдельная цепь представляет собой выражение, составленное графически из отдельных элементов. К выходу блока подключается следующий блок, образуя цепь. Внутри цепи блоки выполняются строго в порядке их соединения. Результат вычисления цепи записывается во внутреннюю переменную либо подается на выход контроллера.

Ladder Diagram (LD, LAD, РКС) — язык релейной (лестничной) логики. Синтаксис языка удобен для замены логических схем, выполненных на релейной технике. Ориентирован на инженеров по автоматизации, работающих на промышленных предприятиях. Обеспечивает наглядный интерфейс логики работы контроллера, облегчающий не только задачи собственно программирования и ввода в эксплуатацию, но и быстрый поиск неполадок в подключаемом к контроллеру оборудовании. Программа на языке релейной логики имеет наглядный и интуитивно понятный инженерам-электрикам графический интерфейс, представляющий логические операции, как электрическую цепь с замкнутыми и разомкнутыми контактами. Протекание или отсутствие тока в этой цепи соответствует результату логической операции (истина — если ток течет; ложь — если ток не течет). Основными элементами языка являются контакты, которые можно образно уподобить паре контактов реле или кнопки. Пара контактов отождествляется с логической переменной, а состояние этой пары — со значением переменной. Различаются нормально замкнутые и нормально разомкнутые контактные элементы, которые можно сопоставить с нормально замкнутыми и нормально разомкнутыми кнопками в электрических цепях.
Результатом работы FLProg является конечный код, который может быть подгружен в МК.

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

ОБОРУДОВАНИЕ
ТЕХНОЛОГИИ
РАЗРАБОТКИ

Блог технической поддержки моих разработок

Урок 4. Основы программирования Ардуино на языке C.

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

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

Структура программы Ардуино.

Структура программы Ардуино достаточно проста и в минимальном варианте состоит из двух частей setup() и loop().

// код выполняется один раз при запуске программы

// основной код, выполняется в цикле

Функция setup() выполняется один раз, при включении питания или сбросе контроллера. Обычно в ней происходят начальные установки переменных, регистров. Функция должна присутствовать в программе, даже если в ней ничего нет.

После завершения setup() управление переходит к функции loop(). Она в бесконечном цикле выполняет команды, записанные в ее теле (между фигурными скобками). Собственно эти команды и совершают все алгоритмические действия контроллера.

Первоначальные правила синтаксиса языка C.

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

< >фигурные скобки определяют блок функции или выражений. Например, в функциях setup() и loop().

/* … */ блок комментария, обязательно закрыть.

/* это блок комментария */

// однострочный комментарий, закрывать не надо, действует до конца строки.

// это одна строка комментария

Переменные и типы данных.

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

Тип данных Разрядность, бит Диапазон чисел
boolean 8 true, false
char 8 -128 … 127
unsigned char 8 0 … 255
byte 8 0 … 255
int 16 -32768 … 32767
unsigned int 16 0 … 65535
word 16 0 … 65535
long 32 -2147483648 … 2147483647
unsigned long 32 0 … 4294967295
short 16 -32768 … 32767
float 32 -3.4028235+38 … 3.4028235+38
double 32 -3.4028235+38 … 3.4028235+38

Типы данных выбираются исходя из требуемой точности вычислений, форматов данных и т.п. Не стоит, например, для счетчика, считающего до 100, выбирать тип long. Работать будет, но операция займет больше памяти данных и программ, потребует больше времени.

Объявление переменных.

Указывается тип данных, а затем имя переменной.

int x; // объявление переменной с именем x типа int
float widthBox; // объявление переменной с именем widthBox типа float

Все переменные должны быть объявлены до того как будут использоваться.

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

  • Переменные, объявленные в начале программы, до функции void setup(), считаются глобальными и доступны в любом месте программы.
  • Локальные переменные объявляются внутри функций или таких блоков, как цикл for, и могут использоваться только в объявленных блоках. Возможны несколько переменных с одним именем, но разными областями видимости.

int mode; // переменная доступна всем функциям

void setup() <
// пустой блок, начальные установки не требуются
>

long count; // переменная count доступна только в функции loop()

При объявлении переменной можно задать ее начальное значение (проинициализировать).

int x = 0; // объявляется переменная x с начальным значением 0
char d = ‘a’; // объявляется переменная d с начальным значением равным коду символа ”a”

При арифметических операциях с разными типами данных происходит автоматическое преобразование типов данных. Но лучше всегда использовать явное преобразование.

int x; // переменная int
char y; // переменная char
int z; // переменная int

z = x + (int) y; // переменная y явно преобразована в int

Арифметические операции.

= присваиваниее
+ сложение
вычитание
* произведение
/ деление
% остаток от деления

Операции отношения.

== равно
!= не равно
больше
= больше или равно

Логические операции.

&& логическое И
|| логическое ИЛИ
! логическое НЕ

Операции над указателями.

* косвенная адресация
& получение адреса переменной

Битовые операции.

& И
| ИЛИ
^ ИСКЛЮЧАЮЩЕЕ ИЛИ
ИНВЕРСИЯ
> СДВИГ ВПРАВО

Операции смешанного присваивания.

++ + 1 к переменной
— 1 к переменной
+= сложение
-= вычитание
*= умножение
/= деление
%= остаток от деления
&= битовое И
|= битовое ИЛИ

Выбор вариантов, управление программой.

Оператор IF проверяет условие в скобках и выполняет последующее выражение или блок в фигурных скобках, если условие истинно.

if (x == 5) // если x=5, то выполняется z=0
z=0;

if (x > 5) // если x > 5, то выполняется блок z=0, y=8;

IF … ELSE позволяет сделать выбор между двух вариантов.

if (x > 5) // если x > 5, то выполняется блок z=0, y=8;
<
z=0;
y=8;
>
else // в противном случае выполняется этот блок
<
z=0;
y=0;
>

ELSE IF – позволяет сделать множественный выбор

if (x > 5) // если x > 5, то выполняется блок z=0, y=8;
<
z=0;
y=8;
>

else if (x > 20) // если x > 20, выполняется этот блок
<
>

else // в противном случае выполняется этот блок
<
z=0;
y=0;
>

SWITCH CASE — множественный выбор. Позволяет сравнить переменную (в примере это x) с несколькими константами (в примере 5 и 10) и выполнить блок, в котором переменная равна константе.

case 5 :
// код выполняется если x = 5
break;

case 10 :
// код выполняется если x = 10
break;

default :
// код выполняется если не совпало ни одно предыдущее значение
break;
>

Цикл FOR. Конструкция позволяет организовывать циклы с заданным количеством итераций. Синтаксис выглядит так:

for ( действие до начала цикла;
условие продолжения цикла;
действие в конце каждой итерации ) <

Пример цикла из 100 итераций.

Цикл WHILE. Оператор позволяет организовывать циклы с конструкцией:

while ( выражение )
<
// код тела цикла
>

Цикл выполняется до тех пор, пока выражение в скобках истинно. Пример цикла на 10 итераций.

x = 0;
while ( x
<
// код тела цикла
x++;
>

DO WHILE – цикл с условием на выходе.

do
<
// код тела цикла
> while ( выражение );

Цикл выполняется пока выражение истинно.
BREAK – оператор выхода из цикла. Используется для того, чтобы прервать выполнение циклов for, while, do while.

x = 0;
while ( x
<
if ( z > 20 ) break; // если z > 20, то выйти из цикла
// код тела цикла
x++;
>

GOTO – оператор безусловного перехода.

goto metka1; // переход на metka1
………………
metka1:

CONTINUE — пропуск операторов до конца тела цикла.

x = 0;
while ( x
<
// код тела цикла
if ( z > 20 ) continue; // если z > 20, то вернуться на начало тела цикла
// код тела цикла
x++;
>


Массивы.

Массив это область памяти, где последовательно хранятся несколько переменных.

Объявляется массив так.

int ages[10]; // массив из 10 переменных типа int

float weight[100]; // массив из 100 переменных типа float

При объявлении массивы можно инициализировать:

Обращаются к переменным массивов так:

x = ages[5]; // x присваивается значение из 5 элемента массива.
ages[9] = 32; // 9 элементу массива задается значение 32

Нумерация элементов массивов всегда с нуля.

Функции.

Функции позволяют выполнять одни и те же действия с разными данными. У функции есть:

  • имя, по которому ее вызывают;
  • аргументы – данные, которые функция использует для вычисления;
  • тип данных, возвращаемый функцией.

Описывается пользовательская функция вне функций setup() и loop().

void setup() <
// код выполняется один раз при запуске программы
>

void loop() <
// основной код, выполняется в цикле
>

// объявление пользовательской функции с именем functionName
type functionName( type argument1, type argument1, … , type argument)
<
// тело функции
return();
>

Пример функции, вычисляющей сумму квадратов двух аргументов.

int sumQwadr (int x, int y)
<
return( x* x + y*y);
>

Вызов функции происходит так:

d= 2; b= 3;
z= sumQwadr(d, b); // в z будет сумма квадратов переменных d и b

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

Очень коротко, но этих данных должно хватить для того, чтобы начать писать программы на C для систем Ардуино.

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

Рекомендации по оформлению программ на языке C.

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

Имена в языке C.

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

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

Константы должны быть записаны в верхнем регистре. В качестве разделителя нижнее подчеркивание.

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

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

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

Программируем Arduino на чистом Си. Arduino и совместимые языки программирования

Данный раздел посвящен книгам из мира Arduino. Для новичков и профессионалов.

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

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

  • Книги формата PDF: Adobe Acrobat Reader или PDF Reader .
  • Книги формата DJVU: или Djvu Reader .

Практическая энциклопедия Arduino

В книге обобщаются данные по основным компонентам конструкций на основе платформы Arduino, которую представляет самая массовая на сегодняшний день версия ArduinoUNO или аналогичные ей многочисленные клоны. Книга представляет собой набор из 33 глав-экспериментов. В каждом эксперименте рассмотрена работа платы Arduino c определенным электронным компонентом или модулем, начиная с самых простых и заканчивая сложными, представляющими собой самостоятельные специализированные устройства. В каждой главе представлен список деталей, необходимых для практического проведения эксперимента. Для каждого эксперимента приведена визуальная схема соединения деталей в формате интегрированной среды разработки Fritzing. Она дает наглядное и точное представление — как должна выглядеть собранная схема. Далее даются теоретические сведения об используемом компоненте или модуле. Каждая глава содержит код скетча (программы) на встроенном языке Arduino с комментариями.

Электроника. Твой первый квадрокоптер. Теория и практика

Детально изложены практические аспекты самостоятельного изготовления и эксплуатации квадрокоптеров. Рассмотрены все этапы: от выбора конструкционных материалов и подбора компонентов с минимизацией финансовых затрат до настройки программного обеспечения и ремонта после аварии. Уделено внимание ошибкам, которые часто совершают начинающие авиамоделисты. В доступной форме даны теоретические основы полета мультироторных систем и базовые понятия работы со средой Arduino IDE. Приведено краткое описание устройства и принципа работы систем GPS и Глонасс, а также современных импульсных источников бортового питания и литий-полимерных батарей. Подробно изложен принцип работы и процесс настройки систем OSD, телеметрии, беспроводного канала Bluetooth и популярных навигационных модулей GPS Ublox. Рассказано об устройстве и принципах работы интегральных сенсоров и полетного контроллера. Даны рекомендации по подбору оборудования FPV начального уровня, приведен обзор программ для компьютеров и смартфонов, применяемых при настройке оборудования квадрокоптера.

Проекты с использованием контроллера Arduino (2-е изд.)

В книге рассмотрены основные платы Arduino и платы расширения (шилды), добавляющие функциональность основной плате. Подробно описан язык и среда программирования Arduino IDE. Тщательно разобраны проекты с использованием контроллеров семейства Arduino. Это проекты в области робототехники, создания погодных метеостанций, «умного дома», вендинга, телевидения, Интернета, беспроводной связи (bluetooth, радиоуправление).

Во втором издании добавлены проекты голосового управления с помощью Arduino, работа с адресуемыми RGB-лентами, управление iRobot Create на Arduino. Рассмотрены проекты с использованием платы Arduino Leonardo. Приведены пошаговые уроки для начинающих разработчиков.

Изучаем Arduino: инструменты и методы технического волшебства

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

Быстрый старт. Первые шаги по освоению Arduino

Книга ARDUINO Быстрый старт. Первые шаги по освоению ARDUINO содержит всю информацию для ознакомления с платой Arduino,а также 14 практических экспериментов с применением различных электронных компонентов и модулей.

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

Arduino, датчики и сети для связи устройств (2-е изд.)

Рассмотрены 33 проекта на основе микроконтроллерной платы Arduino, в которых показано, как сделать, чтобы электронные устройства могли обмениваться между собой данными и реагировать на команды. Показано, как изменить настройки домашнего кондиционера, «позвонив ему» со своего смартфона; как создавать собственные игровые контроллеры, взаимодействующие по сети; как использовать устройства ZigBee, Bluetooth, инфракрасное излучение и обычное радио для беспроводного получения информации от различных датчиков и др. Рассмотрены языки программирования Arduino, Processing и PHP.

Прочитав книгу — «Arduino, датчики и сети для связи устройств», Вы научитесь создавать сети интеллектуальных устройств, которые обмениваются данными и реагируют на команды. Книга идеально подходит для людей, которые стремятся воплотить на практике свои творческие идеи. Вам не надо обладать специальными техническими знаниями и навыками в области электроники, Для начала реализации проектов необходимы только книга, идеи и недорогой набор с контроллером Arduino и некоторыми сетевыми модулями и датчиками.

Arduino Essentials

The Arduino is an open source microcontroller built on a single circuit board that is capable of receiving sensory input from its environment and controlling interactive physical objects. It is also a development environment that allows you to write software to the board, and is programmed in the Arduino programming language. The Arduino has become the most popular microcontroller platform and thus hundreds of projects are being developed using it, from basic to advanced levels.

This book will first introduce you to the most important board models of the Arduino family. You will then learn to set up the Arduino software environment. Next, you will work with digital and analog inputs and outputs, manage the time precisely, establish serial communications with other devices in your projects, and even control interrupts to make your project more responsive. Finally, you will be presented with a complete real-world example by utilizing all the concepts learned so far in the book. This will enable you to develop your own microcontroller projects.

Arduino Development Cookbook

If you want to build programming and electronics projects that interact with the environment, this book will offer you dozens of recipes to guide you through all the major applications of the Arduino platform. It is intended for programming or electronics enthusiasts who want to combine the best of both worlds to build interactive projects.

The single-chip computer board Arduino is small in size but vast in scope, capable of being used for electronic projects from robotics through to home automation. The most popular embedded platform in the world, Arduino users range from school children to industry experts, all incorporating it into their designs.

Arduino Development Cookbook comprises clear and step-by-step recipes that give you the toolbox of techniques to construct any Arduino project, from the simple to the advanced. Each chapter gives you more essential building blocks for Arduino development, from learning about programming buttons through to operating motors, managing sensors, and controlling displays. Throughout, you’ll find tips and tricks to help you troubleshoot your development problems and push your Arduino project to the next level!

Arduino Sketches: Tools and Techniques for Programming Wizardry

Master programming Arduino with this hands-on guide Arduino Sketches is a practical guide to programming the increasingly popular microcontroller that brings gadgets to life. Accessible to tech-lovers at any level, this book provides expert instruction on Arduino programming and hands-on practice to test your skills. You’ll find coverage of the various Arduino boards, detailed explanations of each standard library, and guidance on creating libraries from scratch plus practical examples that demonstrate the everyday use of the skills you’re learning.

Work on increasingly advanced programming projects, and gain more control as you learn about hardware-specific libraries and how to build your own. Take full advantage of the Arduino API, and learn the tips and tricks that will broaden your skillset. The Arduino development board comes with an embedded processor and sockets that allow you to quickly attach peripherals without tools or solders. It’s easy to build, easy to program, and requires no specialized hardware. For the hobbyist, it’s a dream come true especially as the popularity of this open-source project inspires even the major tech companies to develop compatible products.

Arduino and LEGO Projects

We all know how awesome LEGO is, and more and more people are discovering how many amazing things you can do with Arduino. In Arduino and LEGO Projects, Jon Lazar shows you how to combine two of the coolest things on the planet to make fun gadgets like a Magic Lantern RF reader, a sensor-enabled LEGO music box, and even an Arduino-controlled LEGO train set.

* Learn that SNOT is actually cool (it means Studs Not on Top)
* See detailed explanations and images of how everything fits together
* Learn how Arduino fits into each project, including code and explanations

Whether you want to impress your friends, annoy the cat, or just kick back and bask in the awesomeness of your creations, Arduino and LEGO Projects shows you just what you need and how to put it all together.

Arduino Workshop

The Arduino is a cheap, flexible, open source microcontroller platform designed to make it easy for hobbyists to use electronics in homemade projects. With an almost unlimited range of input and output add-ons, sensors, indicators, displays, motors, and more, the Arduino offers you countless ways to create devices that interact with the world around you.

In Arduino Workshop, you’ll learn how these add-ons work and how to integrate them into your own projects. You’ll start off with an overview of the Arduino system but quickly move on to coverage of various electronic components and concepts. Hands-on projects throughout the book reinforce what you’ve learned and show you how to apply that knowledge. As your understanding grows, the projects increase in complexity and sophistication.

C Programming for Arduino

Building your own electronic devices is fascinating fun and this book helps you enter the world of autonomous but connected devices. After an introduction to the Arduino board, you’ll end up learning some skills to surprise yourself.

Physical computing allows us to build interactive physical systems by using software & hardware in order to sense and respond to the real world. C Programming for Arduino will show you how to harness powerful capabilities like sensing, feedbacks, programming and even wiring and developing your own autonomous systems.

C Programming for Arduino contains everything you need to directly start wiring and coding your own electronic project. You’ll learn C and how to code several types of firmware for your Arduino, and then move on to design small typical systems to understand how handling buttons, leds, LCD, network modules and much more.

Arduino для начинающих волшебников

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

Программирование микроконтроллерных плат Arduino/Freeduino

Рассмотрено программирования микроконтроллерных плат Arduino/Freduino. Описана структура и функционирование микроконтроллеров, среда программирования Arduino, необходимые инструменты и комплектующие для проведения экспериментов. Подробно рассмотрены основы программирования плат Arduino: структура программы, команды, операторы и функции, аналоговый и цифровой ввод/вывод данных. Изложение материала сопровождается более 80 примерами по разработке различных устройств: реле температуры, школьных часов, цифрового вольтметра, сигнализации с датчиком перемещения, выключателя уличного освещения и др. Для каждого проекта приведен перечень необходимых компонентов, монтажная схема и листинги программ. На FTP-сервере издательства выложены исходные коды примеров из книги, технические описания, справочные данные, среда разработки, утилиты и драйверы.

Arduino and Kinect Projects

If you’ve done some Arduino tinkering and wondered how you could incorporate the Kinect—or the other way around—then this book is for you. The authors of Arduino and Kinect Projects will show you how to create 10 amazing, creative projects, from simple to complex. You’ll also find out how to incorporate Processing in your project design—a language very similar to the Arduino language.

The ten projects are carefully designed to build on your skills at every step. Starting with the Arduino and Kinect equivalent of «Hello, World,» the authors will take you through a diverse range of projects that showcase the huge range of possibilities that open up when Kinect and Arduino are combined.

Atmospheric Monitoring with Arduino

Makers around the globe are building low-cost devices to monitor the environment, and with this hands-on guide, so can you. Through succinct tutorials, illustrations, and clear step-by-step instructions, you’ll learn how to create gadgets for examining the quality of our atmosphere, using Arduino and several inexpensive sensors.

Detect harmful gases, dust particles such as smoke and smog, and upper atmospheric haze—substances and conditions that are often invisible to your senses. You’ll also discover how to use the scientific method to help you learn even more from your atmospheric tests.

* Get up to speed on Arduino with a quick electronics primer
* Build a tropospheric gas sensor to detect carbon monoxide, LPG, butane, methane, benzene, and many other gases
* Create an LED Photometer to measure how much of the sun’s blue, green, and red light waves are penetrating the atmosphere
* Build an LED sensitivity detector—and discover which light wavelengths each LED in your Photometer is receptive to
* Learn how measuring light wavelengths lets you determine the amount of water vapor, ozone, and other substances in the atmosphere

Руководство по освоению Arduino

Издание представляет собой русскоязычный перевод одного из документов по работе с набором ARDX (Starter Kit for Arduino), предназначенного для экспериментов с Arduino. В документации описано 12 простейших проектов, ориентированных на начальное знакомство с модулем Arduino.

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

Большая Энциклопедия Электрика

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

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

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

Arduino блокнот программиста

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

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

Аналоговые интерфейсы микроконтроллеров

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

Раскрывается специфика применения таких интерфейсов, как I2C, SPI/Microware, SMBus, RS-232/485/422, токовая петля 4-20 мА и др. Дается обзор большого количества современных датчиков: температурных, оптических, ПЗС, магнитных, тензодатчиков и т. д. Подробно описываются контроллеры, АЦП и ЦАПы, их элементы — УВХ, ИОН, кодеки, энкодеры.

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

Руководство по использованию АТ-команд для GSM/GPRS модемов

В этом пособии изложено детальное описание полного набора АТ команд для работы с модемами компании Wavecom. Приведены специальные АТ команды для работы с протоколами стека IP, программно реализованными в модемах Wavecom.

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

Расскажи о нас

Сообщение

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

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

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

Кроме печатных плат, выпускаемых под торговой маркой Arduino, у них имеется собственный язык программирования Ардуино, который основывается на широко известном в кругу программистов языке C/C++ . Давайте более подробно разберемся, что он из себя представляет.

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

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

Программу, написанную на языке программирования Ардуино называют скетчем. Готовые скетчи записываются на плату для их выполнения.

Среда IDE поддерживается такими операционными системами, как Windows, MacOs и Linux. На официальном сайте компании указанно, что данный язык программирования написан на Wiring, но на самом деле его не существует и для написания используется C++ с небольшими изменениями.

Что необходимо для начала работы с Arduino IDE?

Для начала нам потребуются следующие вещи:

  • платы Arduino;
  • кабель USB;
  • компьютер с установленной на него программой Arduino IDE.

Имея этот набор, можно начинать экспериментировать с имеющимися у вас платами, записывая на них ваши первые скетчи.

Как настроить Ардуино на компьютере?

Делается это просто. Необходимо выполнить следующие действия:

  • необходимо подключить собранное вами изделие к компьютеру посредством USB кабеля;
  • в диспетчере устройств необходимо проверить, к какому порту подключен ваш микроконтроллер. Если он не отображается или написано, что устройство не опознано – значит, вы не правильно установили драйвер или ваша плата нуждается в диагностике;
  • следующим шагом будет запуск нашего языка программирования Arduino IDE. В меню необходимо выбрать вкладку инструменты. При ее нажатии откроется список, в котором необходимо выбрать пункт – порт. Там надо выбрать порт, указанный в диспетчере устройств;
  • конечным пунктом является выбор платы, которую мы будем использовать для загрузки скетчей.

Важно! При подключении вашей платы к другому USB порту все настройки будет необходимо произвести заново.

Знакомство с интерфейсом Ардуино

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

Ниже расположена панель с иконками, которые отображают наиболее используемые функции Arduino IDE:

  • проверка на наличие ошибок;
  • создание нового скетча;
  • открытие окна порта микроконтроллера;
  • Следующим по важности элементом является вкладка с файлами проекта. Если это простой скетч, то файл будет всего один. Однако сложные скетчи могут состоять из нескольких файлов. В таком случае на панели вкладок можно быстро переключить просмотр с одного файла на другой. Это очень удобно.

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

    Компиляция – преобразование исходного кода языка высокого уровня в машинный код или на язык ассемблера.

    Основные функции языка программирования

    Давайте наконец-то перейдем к самым основным функция языка программирования Ардуино.

    Сразу скажем, что все функции вы можете найти в нашем удобном на .

    Точка с запятой;

    Точка с запятой должна следовать за каждым выражением, написанным на языке программирования Arduino. Например:

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

    Двойная обратная косая черта для однострочных комментариев //

    Комментарии — это то, что вы используете для комментирования кода. Хороший код хорошо комментируется. Комментарии предназначены для того, чтобы сообщать вам и всем, кто мог бы наткнуться на ваш код, то как вы думали, когда вы его написали. Хорошим комментарием было бы что-то вроде этого:

    // К этому пину Arduino подключаем светодиод int LEDpin = 9;

    Теперь, даже через 3 месяца когда я просматриваю эту программу я знаю о том куда подключался светодиод.

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

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

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

    Фигурные скобки

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

    Помните — никакая фигурная скобка не может не быть закрыта!

    Функции ()

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

    1. Получить ведро
    2. Заполнить его водой
    3. Добавить мыло
    4. Найти собаку
    5. Намылить собаку
    6. Помыть собаку
    7. Ополоснуть собаку
    8. Посушить собака
    9. Отложить ведро

    Этот набор простых инструкций может быть инкапсулирован в функцию, которую мы можем назвать WashDog. Каждый раз, когда мы хотим выполнить все эти инструкции, мы просто набираем WashDog и вуаля — все инструкции выполняются.

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

    А что с круглыми скобками после функции pinMode? Для многих функций требуются аргументы. Аргумент — это информация, которую функция использует при ее запуске. Для нашей функции WashDog аргументами могут быть имя собаки и тип мыла, а также температура и размер ведра.

    PinMode(13, OUTPUT); //Устанавливает режим вывода Arduino

    Аргумент 13 относится к выводу 13, а OUTPUT — режим, в котором вы хотите, чтобы пин работал. Когда вы вводите эти аргументы, в терминология это называется передачей данных, вы передаете необходимую информацию в функции. Не всем функциям требуются аргументы, но открытие и закрытие круглых скобок остаются, хотя и пустыми.

    Millis(); //Получает время в миллисекундах за которое Arduino запускается

    Обратите внимание, что слово OUTPUT обычно синего цвета. В языке программирования Ардуино есть определенные ключевые слова, которые часто используются, а синий цвет помогает их идентифицировать. Arduino IDE автоматически превращает их в синий цвет.

    void setup ()

    Функция setup (), как следует из названия, используется для настройки платы Arduino. Ардуино выполняет весь код, который содержится между фигурными скобками после setup() только один раз. Типичные вещи, которые происходят в setup() — это, например, установка режимом контактов:

    Возможно, вам интересно что означает void перед функцией setup(). Void означает, что функция не возвращает информацию.

    Некоторые функции возвращают значения — наша функция DogWash может вернуть количество ведер, необходимых для очистки собаки. Функция analogRead() возвращает целое значение от 0 до 1023. Если это сейчас кажется немного странным, не беспокойтесь, поскольку мы будем охватывать каждую общую функцию Arduino по мере продолжения курса.

    Давайте рассмотрим пару вещей, которые вы должны знать о setup():

    1. setup() запускается только один раз;
    2. setup() должна быть первой функцией в скетче Ардуино;
    3. setup() должна иметь открывающиеся и закрывающие фигурные скобки.

    void loop()

    Вы должны любить разработчиков Arduino, потому они сделали так, что имена функций говорят сами за себя. Как следует из названия, весь код между фигурными скобками в loop() повторяется снова и снова, а слово loop переводится именно как «цикл». Функция loop() — это место, где будет находиться тело вашей программы.

    Как и в случае с setup(), функция loop() не возвращает никаких значений, поэтому перед неё предшествует слово void.

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

    Существуют ли еще программы, работающие с Ардуино?

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

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

    Существует еще одна интересная версия исходной программы. Называется она B4R, и главным ее отличием является использование в качестве основы не языка си, а другой язык программирования – Basic. Данный программный продукт является бесплатным. Для работы с ним существуют хорошие самоучители, в том числе и написанные создателями данного продукта.

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

    Конкуренты Ардуино

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

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

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

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

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

    Подробно Arduino язык программирования для начинающих представлен в таблице далее. Микроконтроллер Arduino программируется на специальном языке программирования, основанном на C/C ++. Язык программирования Arduino является разновидностью C++, другими словами, не существует отдельного языка программирования для Arduino. Скачать книгу PDF можно в конце страницы.

    В Arduino IDE все написанные скетчи компилируются в программу на языке C/C++ с минимальными изменениями. Компилятор Arduino IDE значительно упрощает написание программ для этой платформы и создание устройств на Ардуино становится намного доступней людям, не имеющих больших познаний в языке C/C++. Дадим далее небольшую справку с описанием основных функций языка Arduino с примерами.

    Подробный справочник языка Ардуино

    Язык можно разделить на четыре раздела: операторы, данные, функции и библиотеки.

    Операторы

    Язык Arduino Пример Описание
    setup() void setup ()
    <
    pinMode (3, INPUT );
    >
    Функция используется для инициализации переменных, определения режимов работы выводов на плате и т.д. Функция запускается только один раз, после каждой подачи питания на микроконтроллер.
    loop() void loop ()
    <
    digitalWrite (3, HIGH );
    delay(1000);
    digitalWrite (3, LOW );
    delay(1000);
    >
    Функция loop крутится в цикле, позволяя программе совершать вычисления и реагировать на них. Функции setup() и loop() должны присутствовать в каждом скетче, даже если эти операторы в программе не используются.

    Управляющие операторы

    if
    if (x >
    if (x ) и проверяет, достигнута ли истинность условия. Например, если значение переменной x больше 100, то включается светодиод на выходе 13, если меньше — светодиодвыключается.
    if..else
    if (x > 100) digitalWrite (3, HIGH );
    else digitalWrite (3, LOW );
    Оператор else позволяет cделать проверку отличную от указанной в if, чтобы осуществлять несколько взаимо исключающих проверок. Если ни одна из проверок не получила результат ИСТИНА, то выполняется блок операторов в else.
    switch…case
    switch (x)
    <

    >

    Подобно if, оператор switch управляет программой, позволяя задавать действия, которые будут выполняться при разных условиях. Break является командой выхода из оператора, default выполняется, если не выбрана ни одна альтернатива.
    for void setup ()
    <
    pinMode (3, OUTPUT );
    >
    void loop ()
    <
    for (int i=0; i ;
    (точка с запятой)

    digitalWrite (3, HIGH );
    Точка с запятой используется для обозначения конца оператора. Забытая в конце строки точка с запятой приводит к ошибке при компиляции.
    <>
    (фигурные скобки)
    void setup ()
    <
    pinMode (3, INPUT );
    >
    Открывающая скобка “<” должна сопровождаться закрывающей скобкой “>”. Непарные скобки могут приводить к скрытым и непонятным ошибкам при компиляции скетча.
    //
    (комментарий)
    x = 5; // комментарий

    Этот симулятор лучше всего работает в браузере Chrome
    Давайте рассмотрим Arduino по внимательней.

    Arduino это не большой компьютер, к которому могут подключаться внешние цепи. В Arduino Uno используется Atmega 328P
    Это самый большой чип на плате. Этот чип выполняет программы, которые хранятся в его памяти. Вы можете загрузить программу через usb с помощью Arduino IDE. Usb порт также обеспечивает питание arduino.


    Есть отдельный разъём питания. На плате есть два вывода обозначенные 5v и 3.3v, которые нужны для того, чтобы запитывать различные устройства. Так же вы найдете контакты, помеченные как GND, это выводы земли (земля это 0В). Платформа Arduino, так же, имеет 14 цифровых выводов (пинов), помеченных цифрами от 0 до 13, которые подключаются к внешним узлам и имеют два состояния высокое или низкое (включено или выключено). Эти контакты могут работать как выходы или как входы, т.е. они могут либо передавать какие-то данные и управлять внешними устройствами, либо получать данные с устройств. Следующие выводы на плате обозначены А0-А5. Это аналоговые входы, которые могут принимать данные с различных датчиков. Это особенно удобно, когда вам надо измерить некий диапазон, например температуру. У аналоговых входов есть дополнительные функции, которые можно задействовать отдельно.

    Как использовать макетную плату.

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

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

    Два верхних и нижних ряда соединены по — рядно вдоль всей платы. Эти ряды используются, чтобы подавать питание на схему. Это может быть 5в или 3.3в, но в любом случае, первое, что вам надо сделать — это подключить 5в и GND на макетную плату, как показано на рисунке. Иногда эти соединения рядов могут прерываться посередине платы, тогда, если вам понадобится, вы можете их соединить, как показано на рисунке.

    Остальные отверстия, расположенные в середине платы, группируются по пять отверстий. Они используется для соединения деталей схемы.

    Первое, что мы подключим к нашему микроконтроллеру, это светодиод. Схема электрических соединений показана на картинке.

    Для чего нужен резистор в схеме? В данном случае он ограничивает ток, который проходит через светодиод. Каждый светодиод рассчитан на определённый ток, и если этот ток будет больше, то светодиод выйдет из строя. Узнать, какого номинала должен быть резистор можно с помощью закона ома. Для тех кто не знает или забыл, закон ома говорит, что существует линейная зависимость тока от напряжения. Т.е, чем больше мы приложим напряжение к резистору, тем больше потечет через него ток.
    V=I*R
    Где V -напряжение на резистор
    I — ток через резистор
    R — сопротивление, которое надо найти.
    Во-первых, мы должны узнать напряжение на резистор. Большинство светодиодов 3мм или 5мм, которые вы будете использовать, имеют рабочее напряжение 3в. Значит, на резисторе нам надо погасить 5-3=2в.

    Затем мы вычислим ток, проходящий через резистор.
    Большинство 3 и 5мм светодиодов светятся полной яркостью при токе 20мА. Ток больше этого может вывести их из строя, а ток меньшей силы снизит их яркость, не причинив никакого вреда.

    Итак, мы хотим включить светодиод в цепь 5в,чтобы на нем был ток 20мА. Так как все детали включены в одну цепь на резистор тоже будет ток 20мА.
    Мы получаем
    2В = 20 мА * R
    2В = 0.02A * R
    R = 100 Ом

    100 Ом это минимальное сопротивление, лучше использовать немного больше, потому, что светодиоды имеют некоторый разброс характеристик.
    В данном примере используется резистор 220 Ом. Только потому, что у автора их очень много:wink: .

    Вставьте светодиод в отверстия посередине платы таким образом, чтобы его длинный вывод был соединён с одним из выводов резистора. Второй конец резистора соедините с 5V, а второй вывод светодиода соедините с GND. Светодиод должен загореться.

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

    А вот как вы будете соединять резистор, разницы совсем нет. Можете его перевернуть или попробовать подсоединить к другому выводу светодиода, это не повлияет на работу схемы. Он все так же будет ограничивать ток через светодиод.

    Анатомия Arduino Sketch.

    Программы для Arduino называют sketch. Они состоят из двух основных функций. Функция setup и функция loop
    внутри этой функции вы будете задавать все основные настройки. Какие выводы будут работать на вход или выход, какие библиотеки подключать, инициализировать переменные. Функция Setup() запускается только один раз в течение скетча, когда стартует выполнение программы.
    это основная функция, которая выполняется после setup() . Фактически это сама программа. Это функция будет выполняться бесконечно, пока вы не выключите питание.

    Arduino мигает светодиодом

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

    Эта функция используется в setup () части программы и служит для инициализации выводов, которые вы будете использовать, как вход (INPUT) или выход (OUTPUT) . Вы не сможете считать или записать данные с пина, пока не установите его соответственно в pinMode . Эта функция имеет два аргумента: pinNumber — это номер пина, который вы будете использовать.

    Mode -задает, как пин будет работать. На вход (INPUT) или выход (OUTPUT) . Чтобы зажечь светодиод мы должны подать сигнал ИЗ Arduino. Для этого мы настраиваем пин на выход.
    — эта функция служит для того, чтобы задать состояние (state) пина (pinNumber) . Есть два основных состояния (вообще их 3), одно это HIGH , на пине будет 5в, другое это Low и на пине будет 0в. Значит, чтобы зажечь светодиод нам надо на пине, соединенном со светодиодом выставить высокий уровень HIGH .

    Задержка. Служит для задержки работы программы на заданный в мсек период.
    Ниже приведен код, который заставляет мигать светодиод.
    //LED Blink int ledPin = 7;//пин Arduino к которому подключен светодиод void setup() < pinMode(ledPin, OUTPUT);// установка пина как ВЫХОД >void loop() < digitalWrite(ledPin, HIGH);//зажечь светодиод delay(1000);// задержка 1000 мсек (1 сек) digitalWrite(ledPin, LOW);//Выключить светодиод delay(1000);//ждать 1 сек >

    Небольшие пояснения по коду.
    Строки, которые начинаются с «//» это комментарии Arduino их игнорирует.
    Все команды заканчиваются точкой с запятой, если вы их забудете, то получите сообщение об ошибке.

    ledPin — это переменная. Переменные используются в программах для хранения значений. В данном примере переменной ledPin присваивается значение 7, это номер пина Arduino. Когда Arduino в программе встретит строку с переменной ledPin , он будет использовать то значение, которое мы указали ранее.
    Так запись pinMode(ledPin, OUTPUT) аналогична записи pinMode(7, OUTPUT) .
    Но в первом случае вам достаточно поменять переменную и она поменяется в каждой строке, где используется, а во втором случае вам, чтобы поменять переменную, придётся ручками в каждой команде вносить изменения.

    В первой строке указывает на тип переменной. При программировании Arduino важно всегда объявлять тип переменных. Пока вам достаточно знать, что INT объявляет отрицательные и положительные числа.
    Ниже представлено моделирование скетча. Нажмите старт, чтобы посмотреть работу схемы.

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

    Управление несколькими светодиодами.

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

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

    DigitalWrite (led4Pin, HIGH); delay (1000); digitalWrite (led4Pin, LOW); delay (1000);
    полный код скетча во вложении (скачиваний: 1187)

    Регулировка яркости светодиодов

    Иногда вам надо будет менять яркость светодиодов в программе. Это можно сделать с помощью команды analogWrite() . Эта команда так быстро включает и выключает светодиод, что глаз не видит это мерцание. Если светодиод половину времени будет включён, а половину выключен, то визуально будет казаться, что он светится в половину своей яркости. Это называется широтно-импульсная модуляция (ШИМ или PWM по-английски). Шим применяется довольно часто, так как с ее помощью можно управлять «аналоговым» компонентом с помощью цифрового кода. Не все выводы Arduino подходят для этих целей. Только те выводы, около которых нарисовано такое обозначение «

    «. Вы увидите его рядом с выводами 3,5,6,9,10,11.
    Соедините один из ваших светодиодов с одним из выводов ШИМ(у автора это вывод 9). Теперь запуститьскетч мигания светодиода, но прежде измените команду digitalWrite() на analogWrite() . analogWrite() имеет два аргумента: первый это номер вывода, а второй- значение ШИМ (0-255), применительно к светодиодам это будет их яркость свечения, а для электродвигателей скорость вращения. Ниже представлен код примера для разной яркости светодиода.
    //Меняем яркость светодиода int ledPin = 9;//к этому выводу подсоединен светодиод vo >

    Попробуйте поменять значение ШИМ в команде analogWrite () ,чтобы увидеть, как это влияет на яркость.
    Далее вы узнаете, как регулировать яркость плавно от полной до нулевой. Можно,конечно, скопировать кусок кода 255 раз
    analogWrite(ledPin, brightness); delay(5);//short delay brightness = brightness + 1;
    Но, сами понимаете — это будет не практично. Для этого лучше всего использовать цикл FOR, который использовали ранее.
    В следующем примере используются два цикла, один для уменьшения яркости от 255 до 0
    for (int brightness=0;brightness=0;brightness—) < analogWrite(ledPin,brightness); delay(5); >
    delay(5) используется, чтобы замедлить скорость нарастания и уменьшения яркости 5*256=1280 мсек= 1.28 сек.)
    В первой строке используется «brightness- » ,для того чтобы значение яркости уменьшалось на 1, каждый раз, когда цикл повторяется. Обратите внимание, что цикл будет работать до тех пор, пока brightness >=0 .Заменив знак > на знак >= мы включили 0 в диапазон яркости. Ниже смоделирован этот скетч. //плавно меняем яркость int ledPin = 9;//к этому пину подключен светодиод vo >=0;brightness—) < analogWrite(ledPin,brightness); delay(5); >delay(1000);//ждем 1 сек > >
    Это видно не очень хорошо, но идея понятна.

    RGB-светодиод и Arduino

    RGB-светодиод на самом деле это три светодиода разного цвета в одном корпусе.

    Включая разные светодиоды с различной яркостью можно комбинировать и получать разные цвета. Для Arduino, где количество градаций яркости равно 256 вы получите 256^3=16581375 возможных цветов. Реально их, конечно, будет меньше.
    Светодиод, который мы будем использоваться общим катодом. Т.е. все три светодиода конструктивно соединены катодами к одному выводу. Этот вывод мы подсоединим к выводу GND. Остальные выводы, через ограничительные резисторы, надо подсоединить к выводам ШИМ. Автор использовал выводы 9-11.Таким образом можно будет управлять каждым светодиодом отдельно. В первом скетче показано, как включить каждый светодиод отдельно.

    В следующем примере используются команды analogWrite() и , чтобы получать различные случайные значения яркости для светодиодов. Вы увидите разные цвета, меняющиеся случайным образом.
    //RGB LED — random colors //pin connections int red = 9; int green = 10; int blue = 11; void setup() < pinMode(red, OUTPUT); pinMode(blue, OUTPUT); pinMode(green, OUTPUT); >void loop() < //pick a random color analogWrite(red, random(256)); analogWrite(blue, random(256)); analogWrite(green, random(256)); delay(1000);//wait one second >

    Random(256) -возвращает случайное число в диапазоне от 0 до 255.
    В прикрепленном файле скетч, который продемонстрирует плавные переходы цветов от красного к зеленому, затем к синему, красному, зеленому и т.д. (скачиваний: 326)
    Пример скетча работает, но есть много повторяющегося кода. Можно упростить код, написав собственную вспомогательную функцию, которая будет плавно менять один цвет на другой.
    Вот как она будет выглядеть: (скачиваний: 365)
    Давайте рассмотрим определение функции по частям. Функция называется fader и имеет два аргумента. Каждый аргумент отделяется запятой и имеет тип объявленный в первой строке определения функции: void fader (int color1, int color2) . Вы видите, что оба аргумента объявлены как int , и им присвоены имена color1 и color2 в качестве условных переменных для определения функции. Void означает, что функция не возвращает никаких значений, она просто выполняет команды. Если надо было бы написать функцию, которая возвращала результат умножения это выглядело бы так:
    int multiplier(int number1, int number2) < int product = number1*number2; return product; >
    Обратите внимание, как мы объявили Тип int в качестве типа возвращаемого значения вместо
    void .
    Внутри функции идут команды, которые вы уже использовали в предыдущем скетче, только номера выводов заменили на color1 и color2 . Вызывается функция fader , ее аргументы вычисляются как color1 = red и color2 = green . В архиве полный скетч с использованием функций (скачиваний: 272)

    В следующем скетче будет использоваться кнопка с нормально разомкнутыми контактами, без фиксации.

    Это значит, что пока кнопка не нажата, ток через неё не идёт, а после отпускания, кнопка возвращается в исходное положение.
    В схеме, помимо кнопки используется резистор. В данном случае он не ограничивает ток, а «подтягивает» кнопку к 0в (GND). Т.е. пока кнопка не нажата на выводе Arduino, к которому она подключена, будет низкий уровень. Резистор, используемый в схеме 10 кОм.

    //определяем нажатие кнопки int buttonPin = 7; vo > >
    В этом скетче несколько новых команд.
    -эта команда принимает значение High (высокий уровень) и low (низкий уровень), того вывода, который мы проверяем. Предварительно в setup() этот вывод надо настроить на вход.
    ; //где buttonPin это номер вывода, куда подсоединяется кнопка.
    Последовательный порт позволяет отправлять Arduino сообщения на компьютер, в то время, как сам контроллер выполняет программу. Это полезно для отладки программы, отправки сообщений на другие устройства или приложения. Чтобы включить передачу данных через последовательный порт (другое название UART или USART), надо инициализировать его в setup()

    Serial.begin() имеет всего один аргумент-это скорость передачи данных между Arduino и компьютером.
    скетче используется команда для вывода сообщения на экран в Arduino IDE (Tools >> Serial Monitor).
    — конструкция позволяют контролировать ход выполнения программы, объеденив несколько проверок в одном месте.
    If(если) digitalRead возвращает значение HIGH, то на мониторе выводится слово «нажата». Else(иначе) на мониторе выводится слово » отжата» . Теперь можно попробовать включать и выключать светодиод по нажатию кнопки.
    //button press detection with LED output int buttonPin = 7; int ledPin = 8; vo ); > >

    analogRead позволяет считать данные с одного из аналоговых выводов Arduino и выводит значение в диапазоне от 0 (0В) до 1023 (5В). Если напряжение на аналоговом входе будет равно 2.5В, то будет напечатано 2.5 / 5 * 1023 = 512
    analogRead имеет только один аргумент- Это номер аналогового входа (А0-А5). В следующем скетче приводится код считывания напряжения с потенциометра. Для этого подключите переменный резистор, крайними выводами на пины 5V и GND, а средний вывод на вход А0.

    Запустите следующий код и посмотрите в serial monitor, как меняются значения в зависимости от поворота ручки резистора.
    //analog input int potPin = A0;//к этому пину подсоединяется центральный вывод потенциометра vo >Следующий скетч объединяет скетч нажатия кнопки и скетч управления яркостью светодиода. Светодиод будет включаться от кнопки, и управлять яркостью свечения будет потенциометр.
    //button press detection with LED output and variable intensity int buttonPin = 7; int ledPin = 9; int potPin = A0; vo ); > >

    В жизни ардуинщика рано или поздно наступает момент, когда в штатной среде разработки становится тесно. Если скетчам перестает хватать памяти, требуется жесткий реалтайм и работа с прерываниями или просто хочется быть ближе к железу — значит пришло время переходить на C. Бывалые электронщики при упоминании Arduino презрительно поморщатся и отправят новичка в радиомагазин за паяльником. Возможно, это не самый плохой совет, но мы пока не будем ему следовать. Если отбросить Arduino IDE и язык wiring/processing, у нас в руках останется прекрасная отладочная плата, уже оснащенная всем необходимым для работы микроконтроллера. И, что немаловажно, в память контроллера уже зашит бутлоадер, позволяющий загружать прошивку без использования программатора.

    Для программирования на языке C нам понадобится AVR GCC Toolchain.

    Также нам потребуется установленная Arduino IDE, т.к. она содержит утилиту avrdude, которая нужна для загрузки прошивки в контроллер. CrossPack тоже содержит avrdude, но версия, идущая с ним, не умеет работать с Arduino.

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

    #Контроллер, установленный на плате. Может быть другим, например atmega328 DEVICE = atmega168 #Тактовая частота 16 МГц CLOCK = 16000000 #Команда запуска avrdude. Ее нужно скопировать из Arduino >

    В этом файле нам нужно вписать свою команду для запуска avrdude. На разных системах она будет выглядеть по разному. Чтобы узнать свой вариант, запускаем Arduino IDE и в настройках ставим галочку «Show verbose output during upload».

    Теперь загружаем в Arduino любой скетч и смотрим сообщения, выводимые в нижней части окна. Находим там вызов avrdude, копируем все, кроме параметра -Uflash и вставляем в Makefile после «AVRDUDE = ».

    Небольшое замечание: все отступы в Makefile делаются символами табуляции (клавишей Tab). Если ваш текстовый редактор заменяет эти символы пробелами, команда make откажется собирать проект.

    Теперь создадим файл main.c — собственно текст нашей программы, в которой традиционно помигаем светодиодом.

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

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

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

    Программирование Arduino

    Программирование микроконтроллеров Arduino осуществляется на языке программирования C++. Этот язык является низкоуровневым, поэтому считается сложным и имеет высокий порог вхождения. Но для программирования Arduino используется упрощенная версия этого языка программирования. Так же для упрощения разработки прошивок существует множество функций, классов, методов и библиотек. Благодаря этому работать с этими микроконтроллерами очень удобно и легко. Описание большинства необходимых функций и операторов вы найдете на этой странице. Этого хватит для написания прошивок под самые разнообразные устройства на базе ардуино. Для всех функций есть небольшие примеры, показывающие как вы можете их использовать.

    Arduino и совместимые языки программирования

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

    Непосредственно в сам микроконтроллер загружается бинарный машинный код, который выглядит как хаотичный набор букв и цифр. Данный код может быть получен из любого языка программирования, тут всё зависит от среды разработки и такой штуки как интерпретатор. Официальной средой разработки является Arduino IDE, где программирование осуществляется на языке C++ – одном из самых популярных и мощных языков. Сами разработчики называют язык Arduino Wiring, так как в стандартной библиотеке Arduino.h используются функции и инструменты из фреймворка Wiring. Но языком, именно языком, из которого берётся синтаксис, является C++, поэтому параллельно с изучением стандартных функций желательно изучить любой справочник по “плюсам”, например мне очень нравится вот этот. В нём можно найти гораздо больше информации по языку, чем во всех Ардуино-уроках вместе взятых (речь идёт именно о языке и синтаксисе, а не о функциях из Wiring). Помимо Си существуют среды разработки, позволяющие писать на Java, например Espruino WEB IDE, или B4R – на языке Basic. Или XOD – программировать придётся визуальными блоками. Но это откровенно говоря такое себе, мы будем рассматривать только Си.

    Синтаксис

    • Тела функций заключаются в фигурные скобки
    • Каждая команда заканчивается точкой с запятой ;
    • Метод применяется к объекту через точку. Пример: Serial.begin();
    • Вызов функции или метода всегда заканчивается скобками, даже если функция не принимает параметров. Пример: loop()
    • Разделитель десятичных дробей – точка. Пример: 0.25 У запятой тут другое применение
    • Запятыми перечисляются аргументы функций и методов, а также членов массива. Пример: digitalWrite(3, HIGH); массив – int myArray[] = <3, 4, 5 ,6>; Также запятая является самостоятельным оператором, но об этом поговорим отдельно в другом уроке
    • Одиночный символ заключается в одиночные кавычки ‘а’
    • Строка заключается в двойные кавычки “строка”
    • Имена переменных могут содержать латинские буквы в верхнем и нижнем регистре (большие и маленькие), цифры и нижнее подчеркивание. Пример: myVal_35 .
    • Имена переменных не могут начинаться с цифры. Только с буквы или нижнего подчёркивания
    • Регистр имеет значение, т.е. большая буква отличается от маленькой. Пример: переменные val и Val – не одно и то же.

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

    • Однострочный комментарий
    • Многострочный комментарий

    Оформление

    Форматирование

    Есть такое понятие, как форматирование (выравнивание) кода, то есть соблюдение пробелов и интервалов. Чисто для примера, сравните эти два куска кода. Какой смотрится более понятно и наглядно?

    Не бойтесь, во всех серьезных средах разработки есть автоформатирование кода, оно работает как в процессе написания, так и по вызову. Arduino IDE – не исключение, в ней код форматируется по горячей комбинации Ctrl+T.

    • Между математическими действиями, знаками сравнения, присваивания и всем подобным ставится пробел
    • Как и в обычном тексте, пробел ставится после и не ставится перед запятой, двоеточием, точкой с запятой.
    • Отступ от левого края экрана – знак табуляции, код сдвигается вправо и на одном расстоянии формируются команды из одного блока кода. В Arduino />

    Прежде чем переходить к структуре и порядку частей кода, нужно кое-что запомнить:

    • Переменная любого типа должна вызываться после своего объявления. Иначе будет ошибка
    • Объявление и использование классов или типов данных из библиотеки/файла должно быть после подключения библиотеки/файла
    • Функция может вызываться как до, так и после объявления, потому что C++ компилируемый язык, компиляция проходит в несколько этапов, и функции “выделяются” отдельно, поэтому могут вызываться в любом месте программы

    При запуске Arduino IDE даёт нам заготовку в виде двух обязательных функций: setup и loop

    Код в блоке setup выполняется один раз при каждом запуске микроконтроллера. Код в блоке loop выполняется “по кругу” на всём протяжении работы микроконтроллера, начиная с момента завершения выполнения setup.

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

    1. Описание прошивки, полезные ссылки, заметки, авторство
    2. Константы настройки (define и обычные)
    3. Служебные константы (которые следует менять только с полным осознанием дела)
    4. Подключаемые библиотеки и внешние файлы, объявление соответствующих им типов данных и классов
    5. Глобальные переменные
    6. setup
    7. loop
    8. Свои функции

    Пример кода

    Подключение библиотек и файлов

    В реальной работе вы очень часто будете использовать библиотеки или просто внешние файлы, они подключаются к главному файлу (файлу прошивки) при помощи директивы #include, данная директива сообщает препроцессору, что нужно найти и включить в компиляцию указанный файл. Указанный файл может тянуть за собой и другие файлы, но там оно уже всё прописано и подключается автоматически. Рассмотрим пример:

    В чём отличие <> и “”? Когда указываем название “в кавычках”, компилятор сначала ищет файл в папке со скетчем, а затем в папке с библиотеками. При использовании компилятор ищет файл только в папке с библиотеками!

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

    • Мои Документы/Arduino/libraries
    • C:/Program Files (x86)/Arduino/libraries (или C:/Program Files/Arduino/libraries для 32-разрядной Windows)

    В первую папку (в документах) библиотеки попадают при подключении их при помощи команды “подключить .zip библиотеку”. Подключать библиотеки таким способом не рекомендуется, потому что не всегда библиотека попадает к вам в архиве, и проще будет скопировать её вручную в Program files. Также если в обеих папках будут одинаковые по названию библиотеки, это приведёт к конфликту, поэтому библиотеки просто копируем в папку libraries в Program files/Arduino.

    Не используйте мышку!

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

    Автоформатирование – Arduino IDE умеет автоматически приводить ваш код в порядок (имеются в виду отступы, переносы строк и пробелы). Для автоматического форматирования используйте комбинацию CTRL+T на клавиатуре, либо Инструменты/АвтоФорматирование в окне IDE. Используйте чаще, чтобы сделать код красивым (каноничным, классическим) и более читаемым для других!

    Скрытие частей кода – сворачивайте длинные функции и прочие куски кода для экономии места и времени на скроллинг. Включается здесь: Файл/Настройки/Включить сворачивание кода

    Не используйте мышку! Чем выше становится ваш навык в программировании, тем меньше вы будете использовать мышку (да-да, как в фильмах про хакеров). Используйте обе руки для написания кода и перемещения по нему, вот вам несколько полезных комбинаций и хаков, которыми я пользуюсь ПОСТОЯННО:

    • Ctrl+← , Ctrl+→ – переместить курсор влево/вправо НА ОДНО СЛОВО
    • Home , End – переместить курсор в начало/конец строки
    • Shift+← , Shift+→ – выделить символ слева/справа от курсора
    • Shift+Ctrl+← , Shift+Ctrl+→ – выделить слово слева/справа от курсора
    • Shift+Home , Shift+End – выделить все символы от текущего положения курсора до начала/конца строки
    • Ctrl+Z – отменить последнее действие
    • Ctrl+Y – повторить отменённое действие
    • Ctrl+C – копировать выделенный текст
    • Ctrl+X – вырезать выделенный текст
    • Ctrl+V – вставить текст из буфера обмена
    • Ctrl+U – загрузить прошивку в Arduino
    • Ctrl+R – скомпилировать (проверить)
    • Ctrl+Shift+M – открыть монитор порта

    Также для отодвигания комментариев в правую часть кода используйте TAB, а не ПРОБЕЛ. Нажатие TAB перемещает курсор по некоторой таблице, из-за чего ваши комментарии будут установлены красиво на одном расстоянии за вдвое меньшее количество нажатий!

    AVR. Языки программирования.

    Доброго времени суток!

    Сегодня, хотелось бы поговорить на тему выбора языка программирования микроконтроллера AVR . Данная статья имеет исключительно предвзятый характер, и не является истиной в последней инстанции, ведь выбор языка программирования личное дело каждого. Поэтому отнеситесь к данной статье как к просто личному мнению автора блога.

    На момент написания статьи, языков программирования микроконтроллеров AVR существует большое количество. Здесь Вам и стандартные ASM / C так и нестандартные решения вплоть до графического языка программирования. Рассмотреть и потрогать их все я не могу, поэтому расскажу лишь о тех из них, с которыми имел опыт работы:

    Самый простой язык программирования из всех в данной статье. Данный язык основан на языках программирования C/C++. Вы, наверное, посчитаете его отличным началом для новичков, однако эта палка о двух концах. Рассмотрим его плюсы :

    1. Скорость разработки (Наверное, самая высокая среди языков представленных в данной статье).
    2. Простота освоения (Самый простой среди представленных в статье).
    3. Достаточно дружелюбная среда разработки (Субъективное мнение автора).

    Теперь о минусах :

    1. Низкая оптимизация кода (В сравнении с другими языками, представленными в данной статье).
    2. Большинство действий микроконтроллера скрывается от программиста, что пагубно сказывается на его квалификации (Лучше один раз увидеть, чем сто раз услышать).
    3. Подходит лишь для платформ Arduino .

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

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

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

    Самый “низкий” язык программирования микроконтроллера. Его синтаксис представляет набор инструкций контроллера. То есть, данный язык дает наиболее полное представление о принципах работы микроконтроллера. Рассмотрим его положительные черты :

    1. Отличная оптимизация кода (При достаточной квалификации программиста) как по размеру, так и по быстродействию.
    2. Широкие возможности (Часто при помощи Ассемблера можно сделать то, что невозможно на других языках программирования).
    3. Понимание принципов работы микроконтроллера (Знание Ассемблера значительно ускорит процесс вашего обучения)

    Однако данный язык обладает рядом недостатков:

    1. Ассемблер сложен в изучении и понимании.
    2. При недостаточной квалификации программиста, код написанный на Ассемблере уступит по быстродействию и размеру прошивкам написанным на других языках.
    3. Низкая скорость разработки кода .

    Ассемблер — мощное оружие в руках программиста. Эффективность его применения зависит лишь от Вашего умения обращаться с ним.

    Каждый язык программирования имеет свои сильные и слабые стороны. Зная достоинства и недостатки каждого инструмента, профессионал выберет именно тот, который наиболее удовлетворит требования поставленной задачи. Очень часто, применение нескольких языков “одновременно” поможет сэкономить такты микроконтроллера и его память. К примеру, отлично зарекомендовала себя связка языков C и ASM .

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

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

    Продолжить обсуждение предлагаю в комментариях)

    Спасибо за внимание!

    Похожие статьи

    AVR. Языки программирования. : 3 комментария

    Вы так описываете про ардуино как о каком-то самостоятельном языке, и никакого упоминания от том, что это всего лишь С/C++ изложенный в виде библиотечых оберток! Не вводите начинающих в заблуждение.

    Добрый день(Вечер,ночь,утро), Иван!
    Спасибо за ваше замечание, добавил.
    Однако, официальный сайт Arduino, дает следующее определение:
    «The Arduino language is based on C/C++. It links against AVR Libc and allows the use of any of its functions; see its user manual for details.»

    Что означает, что Ардуино это все таки язык, основанный на C/C++.

    Приветствую!
    Вот, другое дело)

    Добавить комментарий Отменить ответ

    Нам нужен именно ты!

    Хочешь поучаствовать в жизни сайта?Написать свою статью, из личного опыта?Или у тебя есть свой сайт и ты хочешь сотрудничать?

    Пиши об этом в комментариях к статьям, или в группе ВКонтакте!

    Введение в язык программирования Arduino

    Основа языка программирования модуля Arduino — это язык Си (скорее Си++). Ещё точнее, этот диалект языка называется Processing/Wiring. Хорошее обозрение языка вы найдёте в приложении. А мне хочется больше рассказать не о языке, а о программировании.

    Программа — это некий набор команд, которые понимает процессор, процессор вашего компьютера или процессор микроконтроллера модуля Arduino, не суть важно. Процессор читает команды и выполняет их. Любые команды, которые понимает процессор — это двоичные числа. Это только двоичные числа и ничто иное. Выполняя арифметические операции, для которых процессор некогда и предназначался, процессор оперирует с числами. Двоичными числами. И получается, что и команды, и то, к чему они относятся, это только двоичные числа. Вот так. Но как же процессор разбирается в этой «куче» двоичных чисел?

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

    Таким образом, любая программа — это последовательность двоичных чисел. А программирование — это умение правильно записывать правильные последовательности двоичных чисел. Достаточно давно для записи программ стали использовать специальные средства, которые называются языками программирования.

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

    Я не готов спорить, но считаю, что программу удобнее начинать с описания на обычном языке. И в этом смысле я считаю, что программирование не следует путать с написанием кода программы. Когда программа описана обычными словами, вам легче определить, например, какой язык программирования выбрать для создания кода программы.

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

    Кроме языков программирования общего применения, всегда существовала некоторая специализация языков программирования, и существовали специализированные языки. К последним я бы отнёс и язык программирования модуля Arduino.

    Всё, что нужно сказать модулю, чтобы он сделал что-то нужное нам, организовано в удобный набор команд. Но вначале о том, что нам нужно от Arduino?

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

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

    Давайте посмотрим, о чём нам может рассказать самая простая программа «Помигать светодиодом».

    pinMode (ledPin, OUTPUT);

    digitalWrite (ledPin, HIGH);

    digitalWrite (ledPin, LOW);

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

    Но этот же вывод порта может работать и как вход. В этом случае его можно представить, например, как вход цифровой микросхемы – на вход подаётся логический уровень, высокий или низкий (см. Приложение А, цифровой ввод).

    Как мы мигаем светодиодом:

    Включить выходной вывод порта. Выключить вывод порта.

    Но процессор работает очень быстро. Мы не успеем заметить мигания. Чтобы заметить это мигание, нам нужно добавить паузы. То есть:

    Включить выходной вывод порта. Пауза 1 секунда.

    Выключить вывод порта.

    Пауза 1 секунда.

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

    Повторение какого-либо процесса или набора команд называется в программировании циклом. Используются разные виды циклов. Есть цикл, который выполняется заданное число раз. Это цикл for. Есть циклы, которые выполняются до тех пор, пока не будет выполнено некоторое условие, которое является частью языковой конструкции цикла. А если условие не будет выполнено никогда, то цикл выполняется бесконечное число раз. Это бесконечный цикл.

    Я не думаю, что микроконтроллеры используются с программами того вида, который приведён выше. То есть, один раз выполнено несколько команд и больше контроллер не работает. Как правило, он работает постоянно, как только на него подаётся питающее напряжение. А, значит, микроконтроллер должен работать в бесконечном цикле.

    Именно об этом говорит функция void loop(), loop — это петля, замкнутый цикл. Условия прекращения работы цикла нет, а, следовательно, нет условия его завершения.

    Кроме того, мы должны сообщить модулю Arduino, какой вывод порта и как мы хотим использовать, для выхода (OUTPUT) или для входа (INPUT). Этой цели служит функция void setup(), которая для языка Arduino является обязательной, даже если она не используется, и команда pinMode(), для задания режима работы вывода.

    pinMode (ledPin, OUTPUT);

    И ещё, языковая конструкция использует переменные для определения номера вывода:

    Использование переменных удобно. Решив, что вы будете использовать не вывод 13, а 12, вы внесёте изменение только в одной строке. Особенно сильно это сказывается в больших программах. Имя переменной можно выбирать по своему усмотрению, но, как правило, оно должно быть только символьным, и часто количество символов ограничивается. Если вы неверно зададите имя переменной, думаю, компилятор вас поправит.

    Функция digitalWrite (ledPin, HIGH) устанавливает заданный вывод в состояние с высоким уровнем, то есть включает вывод.

    А delay (1000), как вы уже поняли, означает паузу в 1000 миллисекунд или 1 секунду.

    Осталось понять, что означают такие приставки, как int, void. Любые значения, любые переменные размещаются в памяти, как и команды программы. В ячейки памяти записываются числа зачастую из 8 битов. Это байт. Но байт — это числа от 0 до 255. Для записи больших чисел нужно два байта или больше, то есть, две или больше ячеек памяти. Чтобы процессору было ясно, как отыскать число, разные типы чисел имеют разные названия. Так число по имени byte, займёт одну ячейку, int (integer, целое) больше. Кроме того, функции, используемые в языках программирования, тоже возвращают числа. Чтобы определить, какой тип числа должна вернуть функция, перед функцией записывают этот тип возвращаемого числа. Но некоторые функции могут не возвращать числа, такие функции предваряют записью void (см. Приложение А, переменные).

    Вот, сколько интересного может рассказать даже самая простая программа.

    Обо всём этом вы, надеюсь, прочитаете в приложении. А сейчас проделаем простые эксперименты, используя только то, что мы уже знаем из возможностей языка. Первое, заменим переменную типа int, которая занимает много места в памяти, на byte — одно место, одна ячейка памяти. Посмотрим, что у нас получится.

    byte ledPin = 13;

    pinMode (ledPin, OUTPUT);

    digitalWrite (ledPin, HIGH);

    digitalWrite (ledPin, LOW);

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

    Для этого мы заменим число в функции delay (1000) переменной, назвав её my_del. Эта переменная должна быть целым числом, то есть, int.

    int my_del = 5000;

    Не забывайте заканчивать каждую команду точкой с запятой. Внесите изменения в программу, скомпилируйте её и загрузите в модуль. Затем поменяйте переменную и повторите компиляцию и загрузку:

    byte my_del = 5000;

    Разница, уверен, получится ощутимая.

    Проделаем ещё один эксперимент с изменением длительности пауз. Уменьшение длительности пауз выполним, скажем, пять раз. Сделаем паузу в 2 секунды, а затем будем увеличивать тоже пять раз. И вновь сделаем паузу в 2 секунды. Цикл, выполняемый заданное количество раз, называется циклом for и записывается он так:

    int value = 0; // переменная для хранения нужного значения

    int ledpin = 9; // светодиод подключен к digital pin 9

    // Нет необходимости вызвать функцию pinMode

    for(value = 0 ; value =0; value-=5) // постепенно гасим светодиод

    Если в предыдущей программе новой для нас была функция digitalRead(inPin), чтение цифрового ввода, то в этой программе новая для нас функция analogWrite(ledpin, value), хотя параметры этой функции — уже знакомые нам переменные. Об использовании аналогового входа, использовании АЦП (аналого-цифрового преобразователя), мы поговорим позже. А сейчас вернёмся к общим вопросам программирования.

    Программирование это то, что доступно всем, но потребуется время, чтобы освоить и программирование, и какой-либо язык программирования. Сегодня есть ряд программ, помогающих освоить именно программирование. И одна из них имеет непосредственное отношение к модулю Arduino. Называется она Scratch for Arduino или сокращённо S4A. Найти и скачать эту программу можно по адресу: http://seaside.citilab.eu/scratch/arduino. Я не знаю, как точно переводится название программы, но «to begin from scratch» переводится, как «начать с нуля».

    На сайте проекта S4A есть версии для Windows и Linux, но для последней операционной системы готовая к установке программа в версии дистрибутива Debian. Не хочу сказать, что её нельзя использовать с другими дистрибутивами Linux, но вначале посмотрим, как работать в программе с модулем Arduino в Windows.

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

    Рис. 4.2. Переключатель языков интерфейса программы

    Первый значок инструментальной панели, если его нажать, отображает все возможные языки интерфейса программы. Русский язык можно найти в разделе…

    Рис. 4.3. Список языков для использования в интерфейсе программы

    … отмеченном, как «больше…».

    Если ничего не предпринимать, то надпись в правом окне «Searching board…» остаётся, но модуль не находится. Чтобы модуль Arduino подключить к программе S4A, следует загрузить с сайта проекта ещё кое-что.

    Рис. 4.4. Файл для загрузки в модуль Arduino для S4A

    Этот файл не что иное, как программа для Arduino (Sketch). То есть, текстовый файл, который можно скопировать в редактор Arduino, откомпилировать и загрузить в модуль. После выхода из программы Arduino можно запустить программу S4A и теперь модуль находится.

    Рис. 4.5. Подключение модуля к программе

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

    Источник: Гололобов В. – С чего начинаются роботы. О проекте Arduino для школьников (и не только) – 2011

    Цукерберг рекомендует:  Победители GeekWeek 2020!
    Понравилась статья? Поделиться с друзьями:
    Все языки программирования для начинающих