Как написать программу для ардуино

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

Как подключить и прошить, способы питания Ардуино есть ссылка в конце этой статьи.

Основой платы Ардуино является микроконтроллер . Рассмотрим на примере Ардуино NANO

Голый микроконтроллер Ардуино NANO

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

  1. обработка информации — вывод обработанной информации
  2. ввод информации — обработка введенной информации — вывод обработанной информации

Все вышесказанное осуществляется через порты (ножки, Pin) микроконтроллера, а порты микроконтроллера физически соедены с ножками платы ардуино плюс обвязка, то есть вспомогательные электронные компоненты. Получаем отладочную плату Ардуино

Ардуино NANO

Как мы видим порты имеют свое предназначение. например I2C, UART протоколы передачи данных, то есть определенного потока 0 и 1. итд. Все спец назначение портов выполнено при изготовлении. Но обо всем по порядку. Ни что так не отбивает охоту начала программирования, как не совсем понятное.

Уроки Arduino #1 — структура программы и типы данных

ЛЮБОЙ порт Ардуино, желтые овалы, мы можем запрограммировать как на вывод информации pinMode(Pin, OUTPUT); , так и на ввод pinMode(Pin, INPUT) ;.

По умолчанию, все пины сконфигурированы как входы (INPUT)

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

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

Программирование на Ардуино можно разделить на три основных раздела: Данные, Операторы, Функции.

Данные состоят из переменных и констант.

П еременные (не постоянное)

То есть переменные могут менять свое значение в ходе выполнения программы. Переменные это произвольно придуманное Вами уникальное название . Для экономии памяти имеют размер — тип, который прописывается перед именем переменной, например, byte MyPeremen = 12 ; . Рассмотрим.

byte это тип, занимает в памяти 1 байт (8 бит), можно записать число 0 — 255 . MyPeremen уникальное , придуманное Вами имя. Присваиваем нашей переменной первоначальное значение = 12. Это не равно, это оператор присваивания, равно будет вот так ==, вернее сравнение, но об этом чуть позже. Можно ни чего не присваивать, byte MyPeremen ; , присвоим в ходе выполнения программы.

Есть знаковые типы данных, есть беззнаковые , есть с плавающей точкой. Давайте посмотрим

Тип char для вывода символа на дисплей. Есть string, для вывода строки, рассмотрим когда будем изучать вывод на дисплей.

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

Читайте также:
Программа блокирует окна всплывающие окна

тип имя_массива [набор_переменных];

Указать Ардуино ИДЕ размер массива можно так:

явным числом указываем количество ячеек

byte MyArray[6];

Указываем содержимое ячеек. Ардуино IDE сама посчитает их количество

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

byte MyArray[3] = ;

Константа (постоянное)

  • LOW в скетче логический 0. На входе порта принимает значение логического 0 от 0 вольт до 2,6 волт
  • HIGH в скетче логическая 1. На входе порта принимает значение логической 1 при 2,6 — 5 вольт
  • I NPUT, OUTPUT мы уже знакомы, настраивает порт на вход или выход.
  • INPUT _ PULLUP порт на вход, подтянуть к ножке внутреннее сопротивление 20 ком к положительному питанию
  • true Обычно говорят, что true — это 1 или истина
  • false определяется как 0 в логическом выражении или лож

Можем так же объявить свою константу, например const byte MyConst = 25; , занимает в оперативной памяти 1 байт (byte).

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

Глобальные данные:

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

Локальные данные:

  • .Объявляется внутри любого блока кода , заключённого в
  • Доступна для чтения и записи только внутри своего блока , и во всех вложенных в него.
  • Находится в оперативной памяти с момента объявления и до выхода из блока, то есть удаляется из памяти и её значение стирается.

Операторы и Функции

Их великое множество. Требуется много отдельных статей. По мере написания будут ТУТ

Что бы понимать дальнейший материал изучим некоторые

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

loop() Оператор зацикливает скетч. В цикле выполняется все ветвления и вычисления.

if Оператор используется в сочетании с операторами сравнения, проверяет, достигнута ли истинность условия

Операторы сравнения

x == y (x равно y), не путать с «=», это оператор присваивания

x != y (x не равно y)

x > y (x больше чем y)

x >= y (x больше чем или равно y)

if (условие) < если условие выполнено мы тут>; не выполнено мы тут ;

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

if (захотел пить)

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

Объяснение требует отдельной статьи. Сегодня рассмотрим следующее :

Serial.begin(скорость); Инициирует последовательное соединение и задает скорость передачи данных в бит/c (бод). Для обмена данными с компьютером используйте следующие значения: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 или 115200.

Serial.print(); Передает данные через последовательный порт в компьютера, в монитор порта Ардуино IDE

digitalRead(Pin) Функция считывает значение с заданного входа — HIGH или LOW, то есть 0 или 1.

Читайте также:
Как отключить защиту на Андроид для скачивания программ

digitalWrite(pin, value) Подает HIGH или LOW значение на цифровой
выход (pin).

Можно создать свою функцию. Функция – блок кода, который выполняет определенную задачу, обычно часто повторяющейся задачи. Синтаксис тип_данных имя_функции (аргументы);. Ф ункция может возвращать значение, а может не возвращать, может передавать аргументы, может не передавать. Пока что запоминаем, если функция ни чего не возвращает впереди пишем void

Все изучим. Подробные объяснения будут ТУТ.

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

Подключаем свою Ардуино к компьютеру и пишем скетч.

Источник: dzen.ru

Как программируют Arduino

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

Язык Arduino

Если опытный программист посмотрит на код для Arduino, он скажет, что это код на C++. Это недалеко от истины: основная логика Ардуино реализована на C++, а сверху на неё надет фреймворк Wiring, который отвечает за общение с железом.

На это есть несколько причин:

  1. У С++ слава «слишком сложного языка». Arduino позиционируется как микроконтроллеры и робототехника для начинающих, а начинающим иногда трудно объяснить, что С++ не такой уж сложный для старта. Проще сделать фреймворк и назвать его отдельным языком.
  2. В чистом С++ нет удобных команд для AVR-контроллеров, поэтому нужен был инструмент, который возьмёт на себя все сложные функции, а на выходе даст программисту часто используемые команды.
  3. Разработчики дали программистам просто писать нужные им программы, а все служебные команды, необходимые для правильного оформления кода на С++, взяла на себя специальная среда разработки.

Подготовка и бесконечность

В любой программе для Arduino есть две принципиальные части: подготовительная часть и основной цикл.

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

Основной цикл — это то, что происходит в функции loop(). Ардуино берёт оттуда команды и выполняет их подряд. Как только команды закончились, он возвращается в начало цикла и повторяет всё. И так до бесконечности.

В основном цикле мы описываем все полезные вещи, которые должен делать контроллер: считывать данные, мигать лампами, включать-выключать моторы, кормить кота и т. д.

Что можно и чего нельзя

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

Вот какие ограничения это на нас накладывает.

Читайте также:
Тоже что и иконка программы

Нет настоящей многозадачности. Можно симулировать многозадачность с помощью приёма Protothreading, но это скорее костыль. Нельзя, например, сказать: «Когда нажмётся такая-то кнопка — сделай так». Вместо этого придётся в основном цикле писать проверку: «А эта кнопка нажата? Если да, то. »

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

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

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

Отчёты? Ошибки? Только при компиляции. У Ардуино нет встроенных средств сообщить вам, что ему нехорошо. Если он завис, он не покажет окно ошибки: во-первых, у него нет графического интерфейса, во-вторых — экрана. Если хотите систему ошибок или отчётность, пишите её

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

И всё же

Ардуино — это кайф: вы с помощью кода можете управлять физическим миром, моторами, лампами и электродеталями. Можно создать умную розетку; можно собрать умный замок для сейфа; можно сделать детектор влажности почвы, который будет включать автоматический полив. И всё это — на довольно понятном, читаемом и компактном языке C++, на который сверху ещё надета удобная библиотека для железа. Прекрасный способ провести выходные.

Какие ещё языки используют для Arduino

Но чу! Под Arduino можно писать и на других языках!

С. Как и С++, Си легко можно использовать для программирования микроконтроллеров Arduino. Только если С++ не требует никаких дополнительных программ, то для С вам понадобится WinAVR, чтобы правильно перевести код в язык, понятный контроллерам AVR.

// функция для подавления дребезга

boolean debounse(boolean last)

boolean current = digitalRead(switchPin);

if(last != current)

delay(5);

current = digitalRead(switchPin);

>

return current;

>

void loop()

currentButton = debounse(lastButton);

if(lastButton == LOW currentButton == HIGH)

ledOn = !ledOn;

>

lastButton = currentButton;

digitalWrite(ledPin, ledOn);

>

Программирование Ардуино с нуля. Arduino для начинающих.

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

Заключение

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

Источник: arduino-info.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru