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

Ардурок 6. Arduino IDE против языка программирования C

Языки программирования C/C++ произвели революцию в компьютерной индустрии. Но что насчет  программировании микроконтроллера Arduino? Есть ли у нее специальный язык программирования или она программируется на языке C/C++?

Короткий и простой ответ на эти вопросы заключается в том, что язык программирования Arduino является, по существу, разновидностью языка C/C++. Другими словами, не существует такой вещи, как «языка программирования Arduino», по факту это тот же самый старый добрый C/С++. Но вы, наверное, слышали о том, что программирование Arduino проще и понятнее, нежели чем других, сопоставимых плат микроконтроллеров, которые также запрограммированы на языках C/C++. Так в чем же разница? Вот пример: предположим, у вас есть мигающий светодиод, подключенный к цифровому выводу 13 вашего Arduino и вы решили написать программу для него в стандартном C/C++. Вот как программа должна выглядеть:

#include <avr/io.h>

#include <util/delay.h>

int main(void)

{

while(1)

{

PORTB = 0x20;

_delay_ms(1000);

PORTB = 0x10;

_delay_ms(1000);

}

return 1;

}

Эта программа, написанная на C/C++, мигает светодиодом, подключенным к микроконтроллеру AVR с секундным интервалом. Инструкция #include в начале кода сообщает компилятору Arduino IDE включить некоторые специальные библиотеки AVR в коде. Остальная часть кода не кажется интуитивно понятно написанной, но давайте посмотрим на то же самое в коде Arduino IDE. Взгляните на приведенный ниже код:

void setup()

{

pinMode(13, OUTPUT);

}

void loop()

{

digitalWrite(13, HIGH);

delay(1000);

digitalWrite(13, LOW);

delay(1000);

}

Эта же программа, написанная в так называемом «языке программирования Arduino», легче для понимания и написания, так как большинство таких выражений, как pinMode(13, OUTPUT) и digitalWrite(13, HIGH) имеют немного больше смысла. Программа работает следующим образом: первая функция pinMode() определяет цифровой порт ввода/вывода № 13 как выходной контакт. Затем функция digitalWrite() генерирует сигнал — логическую единицу HIGH (+5 В) на 13 пине. Функция delay() в следующей строке задерживает выполнение следующей за ней строки кода на 1000 миллисекунд, после чего логический ноль LOW(0 В) выводится на 13 пине также с задержкой на 1000 миллисекунд.

Вы обратили внимание, что второй вариант кода широко использует предопределенные функции, такие как pinMode() и digitalWrite()? Язык программирования Arduino на самом деле это набор предопределенных функций C/C++, которые помогают программистам избежать написания длинных процедур путем замены их предопределенными функциями. Arduino IDE поставляется с обширной библиотекой важных и часто используемых функций. Другие библиотеки функций могут быть включены в программу в соответствии с требованием.

Помните, что микроконтроллер Arduino основывается на чипе Atmel AVR или ARM и вы также можете запрограммировать его напрямую с помощью языка C/С++. Надеюсь, вы поняли разницу между Arduino IDE и C/C++. Вы продолжите изучение концепции программирования Arduino IDE в наших следующих уроках.

.

Концепция программирования: Программирование ведется целиком через собственную программную оболочку (IDE), бесплатно доступную на сайте Arduino. В этой оболочке имеется текстовый редактор, менеджер проектов, препроцессор, компилятор и инструменты для загрузки программы в микроконтроллер. Оболочка написана на Java на основе проекта Processing, работает под Windows, Mac OS X и Linux.

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

Язык программирования Arduino является стандартным C++ (используется компилятор AVR-GCC) с некоторыми особенностями, облегчающими новичкам написание первой работающей программы.

  • Программы, написанные программистом Arduino называются наброски (или иногда скетчи — калька от англ.sketch) и сохраняются в файлах с расширением ino. Эти файлы перед компиляцией обрабатываются препроцессором Ардуино. Также существует возможность создавать и подключать к проекту стандартные файлы C++.
  • Обязательную в C++ функцию main() препроцессор Arduino создает сам, вставляя туда необходимые «черновые» действия.
  • Программист должен написать две обязательные для Arduino функции setup() и loop(). Первая вызывается однократно при старте, вторая выполняется в бесконечном цикле.
  • В текст своей программы (скетча) программист не обязан вставлять заголовочные файлы используемых стандартных библиотек. Эти заголовочные файлы добавит препроцессор Arduino в соответствии с конфигурацией проекта.

    Уроки программирования Arduino

    Однако пользовательские библиотеки нужно указывать.

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

Простейшая Arduino-программа состоит из двух функций:

  • setup(): функция вызывается однократно при старте микроконтроллера.
  • loop(): функция вызывается после setup () в бесконечном цикле все время работы микроконтроллера.

Одна из простейших схем на Arduino — это подключение внешнего светодиода, управление которым происходит при помощи программы (скетча).

Так выглядит полный текст простейшей программы (скетча) мигания светодиодом, подключенного к 13 выводу Arduino, с периодом 2 секунды[15]:

void setup () {

pinMode (13, OUTPUT); // Назначение 13 вывода Arduino выходом

}

void loop () {

digitalWrite (13, HIGH); // Включение 13 вывода, параметр вызова функции digitalWrite HIGH — признак высокого логического уровня

delay (1000); // Цикл задержки на 1000 мс — 1 секунду

digitalWrite (13, LOW); // Выключение 13 вывода, параметр вызова LOW — признак низкого логического уровня

delay (1000); // Цикл задержки на 1 секунду

}

Все используемые в примере функции являются библиотечными. В комплекте Arduino IDE имеется множество примеров программ. Существует перевод документации по Arduino на русский язык[16][17].

Загрузка программы в микроконтроллер

Закачка программы в микроконтроллер Arduino происходит через предварительно запрограммированный специальный загрузчик (все микроконтроллеры от Ардуино продаются с этим загрузчиком). Загрузчик создан на основе Atmel AVR Application Note AN109. Загрузчик может работать через интерфейсы RS-232, USB или Ethernet в зависимости от состава периферии конкретной процессорной платы. В некоторых вариантах, таких как Arduino Mini или неофициальной Boarduino, для программирования требуется отдельный переходник.

Пользователь может самостоятельно запрограммировать загрузчик в чистый микроконтроллер. Для этого в IDE интегрирована поддержка программатора на основе проекта AVRDude. Поддерживается несколько типов популярных дешёвых программаторов.

Среда разработки Arduino IDE сделана для ускоренной разработки приложений для микроконтроллеров Atmega. Однако код, создаваемой на выходе программы получается сильно перегруженным. Возьмем пример с обычной мигалкой blink.ino:

void setup() {                

  pinMode(13, OUTPUT);     

}

 

void loop() {

  digitalWrite(13, HIGH);

  delay(1000);              

  digitalWrite(13, LOW); 

  delay(1000); 

}

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

#include <avr/io.h>

#include <util/delay.h>

 

int main( void )

{

  DDRB |= (1<<5);       // устанавливаем вывод PB5 как выход

  while(1){

  PORTB &= ~(1<<5);  // устанавливаем низкий уровень на выводе PB5

  _delay_ms(1000);      // ждем 1000 миллисекунд

  PORTB |= (1<<5);    // устанавливаем высокий уровень на выводе PB5

  _delay_ms(1000);    // снова ждем 1000 миллисекунд

}

 

  return 0;

}

После компиляции получаем 210 байт, а результат тот же — мигание светодиода. Давайте рассмотрим его подробнее. Первый заголовочный файл нужен для того, чтобы компилятор не "растерялся" при встрече записей DDRB и PORTB.

Компилятор полезет в файл io.h, а из него в файл iom32.h (для atmega32).  В нем компилятор наидет строчки:

#define DDRB    _SFR_IO8(0x17)

#define PORTB   _SFR_IO8(0x18)

и успокоится :). Сделано это для нашего удоства и только.

Далее идет файл delay.h — в нем расписана функция _delay_ms().

Главное меню

Она более компактна по сравнению со встроенной delay().

В примере нет раздела с void Setup() — здесь настройки задаются после int main, а бесконечный цикл задается оператором while(1). 

Строка DDRB |= (1<<5);  расшифровывается так: DDRB = DDRB | (1<<5);  которая вот что делает: берет число 00000001 и сдвигает его на 5 знаков вправо, добавляя слева нули, т.е. получаем число 00100000. Дальше происходит операция ИЛИ:

00000000 или любое другое

00100000

————-

00100000 — это значение записывается в регистр DDRB и делает 5-й вывод порта B выходом. Взгянув на схему платы Ардуино можно заметить, что светодиод припаян к выводу PB5 (он же 13-й вывод на плате). Строчка PORTB &= ~(1<<5); устанавливает низкий уровень на ножке PB5.
_delay_ms(1000); задает задержку с 1000 миллисекунд. PORTB |= (1<<5); устанавливает высокий уровень на выводе PB5.  return 0; нужен для синтаксиса.

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

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

· Structure: команды для написания структуры программы – циклы, ветвления, синтаксис, арифметические и логические операторы, операторы сравнения и работы с битами

· Variables: различные переменные. Аналогичны используемым в Си, для Arduino характерны только несколько:

o HIGH – высокий уровень, логическая 1, +5 Вольт на контакте Arduino

o LOW – низкий уровень, логический 0, 0 Вольт на контакте Arduino

o INPUT – прописывание контакта Arduino как входного (прием информации с внешних устройств)

o OUTPUT – прописывание контакта Arduino как выходного (передача информации на внешние устройства, управление силовыми блоками)

· Functions: функции, используемые в работе с Arduino, будут подробно рассмотрены на следующих занятиях

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

Примечание 2: описания команд в приложенной в среде инструкции даются на английском языке, что может представлять затруднения. Перевод описаний на русский язык имеется на сайте Arduino.ru

Примечание 3: описание команды в программе можно получить, выделив эту команды и выполнив Справка / Найти в справке.

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

Аналогичен используемому в языке Си:

· ; – точка с запятой. Указывает на конец строки. Пример использования:

int led = 13;

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

· { } – круглые скобки. Открывающая скобка – начало блока, закрывающая – конец блока

void setup() {

pinMode(led, OUTPUT);

}

· // – комментарии. То, что написано в строке после данных символов, контроллер на воспринимает, это примечания для программиста

delay(1000); // ждем одну секунду (1000 миллисекунд)

· #include <назавние библиотеки.h> – подключение библиотеки – набора программ, к примеру, для управления ЖК индикатором:

#include <LiquidCrystal.h>

Примечание: точка с запятой после #include не требуется.


Читайте также

  • — Электронная часть – контроллер Arduino и совместимые с ним модули

    В качестве основы для обучения и проектов клуба используется контроллер Arduino. Выбор обусловлен низкой стоимостью при достаточно неплохих характеристиках (от 100-150 рублей за самый дешевый Arduino Pro Mini до 1200 рублей за Arduino Due – флагман основной линейки Arduino), большим количеством…

    [читать подробнее].

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

    Для загрузки написанной программы в Arduino, а также для питания его в процессе работы Arduino подключается к компьютеру через USB. Для этого используется кабель USB-mini USB, который должен быть достаточной длины для комфортной работы с контроллером. После подключения желательно… [читать подробнее].

  • Запрограммировать Arduino просто, как 1,2,3

    .

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

    Ваш e-mail не будет опубликован. Обязательные поля помечены *