Перейти к содержимому

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

  • автор:

Arduino.ru

Язык программирования устройств Ардуино основан на C/C++. Он прост в освоении, и на данный момент Arduino — это, пожалуй, самый удобный способ программирования устройств на микроконтроллерах.

Базовые и полезные знания, необходимые для успешного программирования под платформу Arduino:

  • Начало работы с Arduino в Windows
  • Работа с Arduino Mini
  • Цифровые выводы
  • Аналоговые входы
  • Широтно-импульсная модуляция
  • Память в Arduino
  • Использование аппаратных прерываний в Arduino
  • Перепрошивка контроллера Atmega8U2 для Arduino Uno и Mega2560
  • Переменные
  • Функции
  • Создание библиотек для Arduino
  • Использование сдвигового регистра 74HC595 для увеличения количества выходов
  • Прямое управления выходами через регистры микроконтроллера Atmega
Справочник языка Ардуино

Язык Arduino можно разделить на три раздела:

Операторы

Управляющие операторы
Синтаксис
  • ; (semicolon)
  • <> (curly braces)
  • // (single line comment)
  • /* */ (multi-line comment)
Арифметические операторы
  • = (assignment)
  • + (addition)
  • — (subtraction)
  • * (multiplication)
  • / (division)
  • % (modulo)
Операторы сравнения
  • == (equal to)
  • != (not equal to)
  • <(less than)
  • > (greater than)
  • <=(less than or equal to)
  • >= (greater than or equal to)
Логические операторы
Унарные операторы
  • ++ (increment)
  • — (decrement)
  • += (compound addition)
  • -= (compound subtraction)
  • *= (compound multiplication)
  • /= (compound division)

Данные

Константы
  • HIGH | LOW
  • INPUT | OUTPUT
  • true | false
  • Целочисленные константы
  • Константы с плавающей запятой
Типы данных
Преобразование типов данных
Область видимости переменных и квалификаторы

Функции

Цифровой ввод/вывод
Аналоговый ввод/вывод
  • analogRead()
  • analogReference()
  • analogWrite()
Дополнительные фунции ввода/вывода
Работа со временем
Математические функции
Тригонометрические функции
Генераторы случайных значений
Внешние прерывания
  • attachInterrupt()
  • detachInterrupt()
Функции передачи данных
Библиотеки Arduino

Servo — библиотека управления сервоприводами.
EEPROM — чтение и запись энергонезависимой памяти микроконтроллера.
SPI — библиотека, реализующая передачу данных через интерфейс SPI.
Stepper — библиотека управления шаговыми двигателями.

Авторизация

Примеры

Изменяем яркость светодиода — плавное изменение яркости светодиода функцией analogWrite().

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

Тактовая кнопка — считывание состояния кнопки

Мигаем светодиодом без delay() — еще один, более практичный способ мигать светодиодом

Что за особый язык программирования используется для Arduino?

Хочется прояснить ситуацию с так называемым «языком программирования Arduino», который «основан на Wiring». Подобные сочетания слов часто встречаются на страничках, посвященных Arduino. На официальном сайте так и пишут: «. is programmed using the Arduino programming language (based on Wiring)». По факту нет никакого особого языка программирования, и фактически программы пишутся на C/C++, а компилируются и собираются с помощью широко известного avr-gcc.
Все особенности сводятся к тому, что имеется набор библиотек, включающий в себя некоторые функции (вроде pinMode) и объекты (вроде Serial), а при компиляции Вашей программы среда разработки создает временный .cpp файл, в который кроме Вашего кода включается еще несколько строчек, и полученный результат скармливается компилятору а затем линковщику с нужными параметрами.
Для примера можно создать маленький проект с любым именем, добавить туда минимум кода, например так:

--- Test.pde --- void setup() < pinMode(13, OUTPUT); >void loop() < digitalWrite(13, 1); delay(500); digitalWrite(13, 0); delay(500); >---

Если теперь «зашить» полученную программу в Arduino, то в папке с проектом появится папка «applet», а в ней куча файлов. В основном это объектники, содержащие скомпилированные стандартные функции, а также готовая скомпилированная программа в разных форматах (ELF, ROM, HEX). Самым интересным является .cpp файл — это то, во что превратился наш код:

--- Test.cpp --- #include "WProgram.h" // тут определения всех Arduino ф-ий, констант и т.д. void setup(); // объявляют ф-ии setup() и loop(), в которых наша void loop(); // программа для Arduino и пишется void setup() < // --- а вот с этого места пошел наш исходник --- pinMode(13, OUTPUT); >void loop() < digitalWrite(13, 1); delay(500); digitalWrite(13, 0); delay(500); >// здесь наш код кончился, опять пошли "довески" int main(void) // здесь как и принято в c/c++ ф-ия main() < init(); // в ней вызывается своя инициализация setup(); // затем вызывается наш setup() for (;;) // и в бесконечном цикле вызывается наш loop() loop(); return 0; // а сюда вообще никогда не попадаем >---

На самом деле среда Arduino делает еще какие-то мелкие преобразования исходного кода, например декорирует не латинские символы, выносит все «#include» наверх, может еще какие-то мелочи, но идея остается той же самой.

Что за язык программирования используется для Arduino?

На официальном сайте пишут: «…is programmed using the Arduino programming language (based on Wiring)«.
Фактически — нет никакого особого языка программирования и программы пишутся на C/C++, а компилируются и собираются с помощью широко известного avr-gcc (в версии для Windows — WinAVR).
Все особенности сводятся к тому, что имеется набор библиотек, включающий в себя некоторые функции (вроде pinMode) и объекты (вроде Serial), а при компиляции Вашей программы среда разработки создает временный .cpp файл, в который кроме Вашего кода включается еще несколько строчек, и полученный результат скармливается компилятору а затем линковщику с нужными параметрами.

Для примера, рассмотрим стандартный тестовый скетч (Sketch)

Sketch — это название программ для Arduino. Это единичный проект, который загружается и выполняется платой.

Arduino IDE

Например, скетч Blink — мигает светодиодом, подключённым к 13 выводу(File -> SketchBook -> Examples -> Digital -> Blink):
сам файл находится здесь: arduino-0016\examples\Digital\Blink\Blink.pde

/* * Blink * * The basic Arduino example. Turns on an LED on for one second, * then off for one second, and so on. We use pin 13 because, * depending on your Arduino board, it has either a built-in LED * or a built-in resistor so that you need only an LED. * * http://www.arduino.cc/en/Tutorial/Blink */ int ledPin = 13; // LED connected to digital pin 13 void setup() // run once, when the sketch starts < pinMode(ledPin, OUTPUT); // sets the digital pin as output >void loop() // run over and over again < digitalWrite(ledPin, HIGH); // sets the LED on delay(1000); // waits for a second digitalWrite(ledPin, LOW); // sets the LED off delay(1000); // waits for a second >

Если теперь скомпилировать полученную программу в Arduino, то во временной директории
вида
Local Settings\Temp\build40910.tmp\ появится куча файлов.
В основном это объектные, содержащие скомпилированные стандартные функции, а также готовая скомпилированная программа в разных форматах (ELF, ROM, HEX). Самым интересным является .cpp файл — это то, во что превратился наш код, с нашими подробными комментариями — разумеется они добавлены вручную ��
— Temporary_4477_534.cpp —

/* * Blink * * The basic Arduino example. Turns on an LED on for one second, * then off for one second, and so on. We use pin 13 because, * depending on your Arduino board, it has either a built-in LED * or a built-in resistor so that you need only an LED. * * http://www.arduino.cc/en/Tutorial/Blink */ #include "WProgram.h" // тут определения всех Arduino ф-ий, констант и т.д. void setup(); // объявляют ф-ии setup() и loop(), в которых наша void loop(); // программа для Arduino и пишется int ledPin = 13; // светодиод подключается к выводу 13 // --- а вот с этого места пошел наш исходник --- void setup() // вызывается один раз при запуске скетча < pinMode(ledPin, OUTPUT); // устанавливаем вывод, как ВЫХОД >void loop() // вызывается в цикле < digitalWrite(ledPin, HIGH); // устанавливает высокий уровень напряжения (светодиод горит) delay(1000); // задержка на 1 секунду digitalWrite(ledPin, LOW); // устанавливает низкий уровень напряжения (светодиод гаснет) delay(1000); // задержка на 1 секунду >// здесь наш код кончился, опять пошли "довески" int main(void) // здесь как и принято в c/c++ ф-ия main() < init(); // в ней вызывается своя инициализация setup(); // затем вызывается наш setup() for (;;) // и в бесконечном цикле вызывается наш loop() loop(); return 0; // а сюда вообще никогда не попадаем >

На самом деле, среда Arduino делает еще какие-то мелкие преобразования исходного кода, например декорирует не-латинские символы, выносит все «#include» наверх, может еще какие-то мелочи, но идея остается той же самой.

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

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

Что такое Arduino

Если называть вещи своими именами, то Arduino — это конструктор для тех, кому надоело созидать бесполезные образы и захотелось хоть немного наделить их жизнью. В самом простейшем случае Arduino — печатная плата, на которой расположен контроллер, кварцевый генератор, АЦП/ЦАП, несколько разъёмов, диодов и кнопок. Остальное — дело рук хозяина: хотите — создавайте робота, хотите — программно-аппаратную платформу для «умного» дома, ну или забудьте про практическую пользу и развлекайтесь.

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

Arduino достаточно ограниченная платформа в плане возможностей программирования, особенно в сравнении с Raspberry Pi. В силу того, что порог входа неприлично низкий (базовый Tutorial занимает 3 листа формата A4), то рассчитывать на изобилие языков без подключения дополнительных модулей не приходится. За основу здесь принят C/C++, но с использованием различных IDE и библиотек вы получите доступ к оперированию Python, C#, Go, а также таким детским развлечениям, как Snap! и ArduBlock. О том как, когда и кому их использовать, поговорим далее.

C/C++

Базовый язык платформы Arduino, который с некоторыми доработками и упрощениями используется в стандартной программной оболочке. Найти все доступные команды «для новичка» можно здесь, но никто не мешает вам воспользоваться исходными возможностями языка C++, никаких надстроек не потребуетс. Если же есть желание поиграть с «чистым» C, то к вашим услугам программа WinAVR, предназначенная, как следует из названия, для взаимодействия ОС Windows и МК серии AVR, которые и используются на Arduino. Более подробное руководство можете прочитать вот здесь.

Использование C/C++ рекомендуется тем, кто уже имеет представление о программировании, выучил в школе пару языков и хочет создать на Arduino что-то большее, чем светодиодную «мигалку» или простую машинку.

Ardublock

Временно отойдем от языков взрослых к любимому ребятней языку Scratch, а вернее к его адаптации — Ardublock. Здесь всё тоже самое, но с адаптацией к вашей платформе: цветные блоки, конструктор, русские названия, простейшая логика. Такой вариант здорово подойдет даже тем, кто с программированием не знаком вовсе. Подобно тому, как в языке Logo вы можете перемещать виртуальную черепашку по виртуальной плоскости, здесь с помощью нехитрых операций вы можете заинтересовать ребенка реальной интерпретацией его программных действий.

Да, кстати, для использования необходимо на вашу стандартную среду Arduino IDE установить плагин. Последние версии лучше не хватать, они довольно сложные, для начала подойдет датированная концом 2013 года. Для установки скачанный файл переименовываем в «ardublock-all» и запихиваем в папку «Мои документы/Arduino/tools/ArduBlockTool/tool». Если её не существует — создаем. Если что-то не поняли, то вот здесь более подробно.

Snap!

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

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

Рекомендуется младшей возрастной группе, тем, кто учил программирование так давно, что уже ничего не помнит и тем, кто хочет завлечь своего ребенка в IT через Scratch и Snap!.

Python

Формально программировать на Arduino вы можете используя хоть язык Piet, просто потому что при должном упорстве вы скомпилируете в машинный код что угодно. Но в силу того, что Python — один из наиболее популярных языков с практически оптимальным сочетанием сложность\возможности, то обойти стороной его применяемость в Arduino было бы нелепо. Начать изучение Python вы можете с нашего бесплатного интенсива «Основы языка Python».

Итак, для этого вам понадобится библиотеки PySerial (ранее, возможно, вы использовали её для общения с портами компьютера) и vPython. О том, как правильно всё настроить и заставить в конечном счёте работать, можете соответственно почитать здесь и здесь.

Go и другие языки.

Подобно тому, как Arduino взаимодействует с Python через библиотеку PySerial, он может взаимодействовать и с Go, и c Java, и с HTML, и с чем только захотите. Arduino — достаточно популярная платформа, чтобы такой банальный вопрос, как выбор удобного языка, не остановил очередного исследователя. Единственное, что требуется от владельца этой маленькой платы — задумать что-нибудь удивительно интересное, а удобный инструмент неизбежно найдётся.

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

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