Ардуино как программировать

Содержание

Код вы найдете ниже. Вы можете скопировать его, либо скачать файл .ino и вставить его содержимое в новый эскиз arduino.

Вам также потребуется установить библиотеку I2C для вашего ЖК-дисплея. Можно посмотреть в наших библиотеках на сайте или использовать библиотеку скачанную с http://arduino-info.wikispaces.com/LCD-Blue-I2C#v1. Если у вас есть другой чип, а не тот, что отмечен на фото выше — вам нужно будет скачать другую библиотеку.

После того как вы найдете подходящую библиотеку, загрузите zip-файл и установите её, используя нашу инструкцию.

Теория

Пустой цикл loop()<> в коде arduino заставит ардуино вращаться (прим.ред. &#8212; цикличность) несколько тысяч раз в секунду. Давайте посмотрим, что произойдет, когда мы добавим эту задачу

Следующий код будет отображать Hello World! на вашем последовательном мониторе один раз в секунду:

Serial.println(“Hello World!”); delay(1000);

Каждому циклу loop()<> теперь нужно более 1 секунды для завершения из-за команды задержки delay(1000).

Предполагая, что arduino имеет 16-мегагерцовый кристалл, команда delay(1000) тратит 16 000 000 тактов. Другие задачи возможны, если мы устраним эту задержку.

Давайте перепишем вышеприведенный фрагмент кода:

Привет мир! выведется после чего цикл loop()<> возвращается к цикличности с полной скоростью до тех пор, пока флажок 1 = истина.

Поскольку loop()<> нечего делать, а процесс работает на полной скорости, добавим еще одну задачу.

Эта часть кода заставляет светодиод переключаться, после чего loop()<> снова возвращается в процесс, пока флаг Flag2 = true (флажок 2 = ложь).

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

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

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

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

Это достигается за счет использования статических переменных* для отслеживания того, как далеко продвинулась задача. В данном случае это показывают функции scrollMessage () и bargraph().

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

Планировщик заданий

Секрет установки флагов &#8212; создать цикл в 1 миллисекунду (мс) с использованием одного из таймеров Arduino Uno R3. Можно использовать Timer/Counter 2 (8 бит), который оставляет Timer/Counter 1 (16-бит) свободным для других задач.

1 мс достигается путем деления частоты 16 000 000 Гц на 128 для получения интервала времени 8 микросекунд. Если теперь считать эти импульсы 8 мкс и генерировать прерывание, когда счетчик достигнет 125, то 125 x 8 или 1 мс истечет**.

** Фактически мы загружаем 125-1 = 124 в сравнительный регистр соответствия, потому что прерывание не происходит до следующего (125-го) тактового импульса.

Флаги устанавливаются путем помещения следующего кода в ISR (процедуру обслуживания прерываний):

// &#8212;&#8212; count the number of milliseconds that have elapsed Counter1++; Counter2++; // &#8212;&#8212; print “Hello World!” if (Counter1 1000 &#8212; 1) //1 second < Counter1 = 0; Flag1 = true; //the loop()<>sees this flag and prints the message > // &#8212;&#8212; toggle LED if (Counter2 300 &#8212; 1) //300 milliseconds < Counter2 = 0; Flag2 = true; //the loop()<>sees this flag and toggles the LED >

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

Основной цикл loop()<> видит каждый флаг, который задает планировщик задач и выполняет задачу. Добавление дополнительных задач достаточно просто. Создайте дополнительный счетчик и флаг, а затем имитируйте приведенный выше код. На графике выше показана взаимосвязь между тремя задачами, которые выполняет ардуино в данном примере.

Вы можете заметить, что:

  • иногда loop()<> не имеет задач для выполнения;
  • иногда loop()<> выполняет только одну или две задачи;
  • каждая из задач вызывается разное количество раз;
  • гистограмма продвигается каждые 100 мс;
  • текст прокручивается каждые 250 мс;
  • светодиод переключается каждые 300 мс.

Курс Arduino &#8212; Прерывания, создание функций, советы

Функции и точность показаний

Помнишь свой первый эксперимент? А помнишь, как я учил делать его компактнее с помощью for? К чему я это. В этом уроке я покажу, как можно проще выполнять однотипные действия. Сильно доставляет, когда в коде нужно много раз выполнять одно и то же действие. Чтобы облегчить жизнь, я познакомлю тебя с созданием функций.

Еще мы рассмотрим такую полезную штуку, как прерывания. Чем она полезна, рассмотрим ниже.

  • Светодиоды
  • Резисторы на 220 Ом и на 10 кОм
  • Соединительные провода ПАПА- ПАПА
  • Фоторезистор
  • Тактовая кнопка

Соберем светофор из первого эксперимента.

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

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

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

А чтобы вызвать функцию, мы должны написать ее имя с круглыми скобками вот так: function();

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

А могу ли я сделать собственную библиотеку из созданных мною функций? &#8212; спросишь ты. Конечно. Эту задачу мы будем пробовать выполнить в третьей части курса. Сейчас нам это не пригодится. Есть еще много более нужной сейчас информации, не стоит забивать голову.

Чем полезны прерывания? Они позволяют приостановить выполнение основного кода для выполнения какого-нибудь действия. Это бывает полезно в считывании показаний с датчиков. Так как показания считываются только один раз за проход loopa. А если в нем есть паузы, то показания становятся неточными. Это важно в подсчете оборотов колеса, например.

Сейчас я докажу важность прерываний простым экспериментом.

Volatile – для работы с прерываниями мы должны создать переменную с квалификатором. Этот квалификатор объявляется, когда переменная будет изменяться за пределами того участка, где она была объявлена.

attachInterrupt(№, Function, Mode); &#8212; Объявляем о создании прерывания.

№ &#8212; определяет номер прерывания. На Arduino Uno могут обрабатываться всего два прерывания. Прерывание 0 считывается со 2 пина, прерывание 1 – с 3.

Ко второму мы и подключили кнопку.

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

Она не должна иметь параметров и не должна возвращать значение. Кроме того, в функции, вызываемой прерываниями не работает delay(), значение millis() не изменяется и может быть потеря данных с Serial Monitor. А переменные, используемые в функции, должны быть volatile.

Mode – Это условие, при котором будет выполняться прерывание. Всего таких условий четыре:

LOW – когда на порту LOW.

CHANGE – когда значение меняется с LOW на HIGH и наоборот.

RISING – когда значение изменяется с LOW на HIGH.

FALLING – когда значение изменяется с HIGH на LOW.

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

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

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

Главное – захотеть. А дальше разберешься.

Решил собрать свою схему? Похвально! С чего начать? Начни с бумаги! Сначала определись с тем, что ты хочешь от своего устройства. После этого, придумай алгоритм выполнения поставленной задачи и запиши, а лучше – зарисуй его. Когда все продумано, определись с компонентами, необходимыми для сборки. После этого, приступай к написанию кода и сборке схемы.

А что делать, если код не работает?

Первым делом – проверь, подключена ли плата, выбрана ли нужная плата в IDE, выбран ли порт, к которому подключена плата.

Еще нужно перестать бояться выскакивающих ошибок.

Рассмотрим пример ошибки.

Это ошибка выскакивает, когда пропущена точка с запятой, о чем и говорит expected ‘;’ before ‘>’ token

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

А эта, когда ты не объявил переменную.

Если перевести текст ошибки, будет ‘Val’ не был объявлен в этой области видимости. Еще хорошо, что не объявленная переменная подсвечивается, и нет надобности ее искать.

А такая ошибка возникает, если пропущена фигурная скобка.

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

Вгрузил. Не работает

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

В таких случаях нужно определить, где код выполняется как надо, а где что-то уже не так. Для этого можно воспользоваться индикаторами. Например, пищалкой или Serial monitor. Для этого, вставляем tone куда-либо в программу. Если звук произошел, то эта часть программы работает как надо. А если его не было, нужно вставить звук раньше или определить, что не так. Serial может передавать мини- отчеты о выполнении тех или иных частей программы.

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

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

Хватит на сегодня, пожалуй. Можешь быть горд, что познал основы Arduino. До скорого!

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
Плата Arduino Arduino Uno 1 Поиск в Utsource В блокнот
Светодиод АЛ307В 1 Поиск в Utsource В блокнот
Светодиод АЛ102Б 1 Поиск в Utsource В блокнот
Светодиод АЛ307Д 1 Поиск в Utsource В блокнот
Резистор 10 кОм 1 Поиск в Utsource В блокнот
Резистор 220 Ом 3 Поиск в Utsource В блокнот
Переменный резистор Фоторезистор VT90N2 1 Поиск в Utsource В блокнот
Макетная плата Breadboard-half 1 Поиск в Utsource В блокнот
Соединительные провода Папа-Папа 1 Поиск в Utsource В блокнот
Кнопка тактовая Без фиксатора 1 Поиск в Utsource В блокнот
Добавить все

Прикрепленные файлы:

Урок 1. Введение. Общие сведения об Ардуино.

Урок 2. Плата Arduino UNO R3. Описание, характеристики.

Урок 3. Установка программного обеспечения Arduino IDE, подключение платы к компьютеру.

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

Урок 5. Первая программа. Функции управления вводом/выводом. Кнопка, светодиод.

Урок 6. Обработка дребезга контактов кнопки. Интерфейс связи между программными блоками.

Урок 7. Классы в программах Ардуино. Кнопка как объект.

Урок 8. Цифровая фильтрация сигналов в программах для Ардуино.

Урок 9. Создание библиотеки для Ардуино.

Урок 10. Прерывание по таймеру в Ардуино. Библиотека MsTimer2. Параллельные процессы.

Урок 11. Программные таймеры в Ардуино. Циклы с различными временами периода от одного таймера.

Урок 12. Последовательный порт UART в Ардуино. Библиотека Serial. Отладка программ на Ардуино.

Урок 13. Аналоговые входы платы Ардуино. Чтение аналоговых сигналов. Измерение среднего значения сигнала.

Урок 14. EEPROM в Ардуино. Контроль целостности данных.

Урок 15. Указатели в C для Ардуино. Преобразование разных типов данных в байты.

Урок 16. Повышение надежности программ для Ардуино. Сторожевой таймер.

Урок 17. Рабочий проект Ардуино. Охранная сигнализация.

Урок 18. Подключение матрицы кнопок к Ардуино. Функция tone().

Урок 19. Семисегментные светодиодные индикаторы (LED). Режимы управления, подключение к микроконтроллеру.

Урок 20. Подключение семисегментного светодиодного (LED) индикатора к Ардуино. Библиотека управления индикатором.

Урок 21. Подключение к Ардуино LED индикаторов и матрицы кнопок, используя общие выводы.

Урок 22. Работа со временем в Ардуино. Проект спортивного секундомера.

Урок 23. Подключение ЖК (LCD) индикаторов к Ардуино. Библиотека LiquidCrystal.

Урок 24. Подключение аналоговых термодатчиков к Ардуино (LM35, TMP35, TMP36, TMP37). Рабочий проект термометра.

Урок 25. Кремниевые термодатчики серии KTY81 в системе Ардино. Проект термометра-регистратора.

Урок 26. Подключение термодатчиков DS18B20 к Ардуино. Библиотека OneWire. Точный Ардуино термометр-регистратор.

Урок 27. Термопары в системе Ардуино. Проект Ардуино термометра-регистратора для высоких температур.

Урок 28. Униполярный шаговый двигатель в системе Ардуино. Библиотека Stepper.

Урок 29. StepMotor &#8212; библиотека управления шаговыми двигателями в системе Ардуино. Библиотека прерывания по таймеру 1 TimerOne.

Урок 30. Текстовые строки в Ардуино. Конвертирование данных в строки и наоборот. Класс String.

Урок 31. Драйвер шагового двигателя на Ардуино с управлением от компьютера. Протокол обмена данными с использованием AT команд.

Урок 32. Следящий электропривод с шаговым двигателем.

Урок 33. Биполярный шаговый двигатель в системе Ардуино.

Урок 34. STEP/DIR драйверы шаговых двигателей. Основные понятия. Протокол STEP/DIR.

Урок 35. Подключение STEP/DIR драйверов шаговых двигателей к Ардуино. Библиотека StepDirDriver.

Урок 36. Разработка Ардуино-контроллера элемента Пельтье. Импульсный (ключевой) регулятор напряжения.

Урок 37. Широтно-импульсная модуляция в Ардуино.

Урок 38. Ардуино-контроллер элемента Пельтье. Структура программы. Измерение выходных параметров контроллера.

Урок 39. Разработка контроллера элемента Пельтье. Интегральный регулятор мощности.

Урок 40. ПИД регулятор. Принцип действия, математическое описание, настройка.

Урок 41. Разработка контроллера элемента Пельтье. ПИД регулятор температуры.

Урок 42. Контроллер элемента Пельтье. Реализация пользовательского интерфейса и защитных функций.

Урок 43. Разработка контроллера элемента Пельтье. Программа верхнего уровня. Проверка, настройка устройства.

Урок 44. Контроллер элемента Пельтье. Другая версия программного обеспечения. Завершение проекта.

Урок 45. Другие платы Ардуино с микроконтроллерами ATmega168/328. Плата Arduino Nano.

Урок 46. Другие платы Ардуино с микроконтроллерами ATmega168/328. Плата Arduino Pro Mini.

Урок 47. Обмен данными между платами Ардуино. Основные понятия. Терминология.

Урок 48. Обмен данными между платой Ардуино и компьютером через интерфейс UART.

Урок 49. Обмен данными между платами Ардуино через интерфейс UART.

Урок 50. Помехоустойчивость и физическая среда стандартного интерфейса UART.

Урок 51. Радиальные интерфейсы RS-232 и RS-422.

Урок 52. Интерфейс ИРПС (цифровая токовая петля). Принцип действия, параметры, схемная реализация.

Урок 53. Плата MassDuino UNO LC (MD-328D). АЦП высокого разрешения (до 16 бит), расширенные функциональные возможности, полная совместимость с Arduino UNO.

Урок 54. Специфика программирования платы MassDuino UNO LC. Установка программного обеспечения, программирование АЦП, ЦАП, дополнительных цифровых выводов.

Урок 55. Работа с инкрементальным энкодером в Ардуино. Библиотека Encod_er.h.

Урок 56. Протокол последовательной передачи данных ModBus RTU.

Урок 57. Обмен данными между платой Ардуино и компьютером через UART по протоколу ModBus. Библиотека Tiny_ModBusRTU_Slave.

Урок 58. Обмен данными между платами Ардуино через UART по протоколу ModBus. Библиотека Tiny_ModBusRTU_Master.

Урок 59. Объединение нескольких плат Ардуино в локальную сеть с топологией “Общая шина”. Преобразование UART в последовательный интерфейс с одной сигнальной линией.

Урок 60. Интерфейс RS-485.

Урок 61. Аппаратная реализация интерфейса RS-485. Объединение плат Ардуино в локальную сеть RS-485.

Урок 62. Технология клиент-сервер.

Урок 63. Локальная сеть Ethernet. Модуль ENC28J60, его подключение к плате Ардуино.

Урок 64. TCP сервер и клиент на Ардуино. Библиотека UIPEthernet.

Урок 65. Аналогово-цифровые преобразования Ардуино в фоновом режиме. Библиотека BackgroundADC.

Урок 66. OSD-генератор MAX7456. Общее описание, функциональные возможности, параметры, подключение к плате Ардуино.

Урок 67. Ардуино-библиотека OSD-генератора MAX7456. Описание библиотеки, проблемы некорректной работы, исправленный вариант.

Урок 68. Практическое программирование OSD-контроллера MAX7456 в системе Ардуино. Создание и загрузка шрифтов, вывод информации на экран.

Урок 69. Протокол UDP. Создание UDP-сервера и клиента с помощью библиотеки UIPEthernet.

Урок 70. Протокол HTTP. Создание WEB-сервера на Ардуино. Использование HTML-кода.

Урок 71. Продолжение темы HTTP-протокола. Передача данных от клиента WEB-серверу с помощью GET-запросов.

Урок 72. HTTP-протокол (продолжение). Передача данных WEB-серверу с помощью POST-запросов.

Урок 73. ПИД-регулятор скорости вращения двигателя постоянного тока. Разработка аппаратной части.

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

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

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

Давайте немного разберём что несёт в себе этот скетч. С 1 по 23 сточку мы видим текст серого цвета. Этот текст несёт информационный характер и описывает пользователю некоторые параметры работы данного скетча, также автор этого скетча может оставить контактную информацию о себе. Эти строчки закомментированы и при прошивке контроллера они не загружаются в него. Закомментировать текст можно двумя способами. Первый способ будет удобен если нужно скрыть от загрузчика несколько строк, в таком случае используется знак /* в начале комментариев, */ в конце комментариев, как в первой и двадцать третьей строке. Второй способ больше подходит для описания части кода или какой либо функции, для этого используется // текст или код попавший за двойной слеш // в пределах одной строки будет скрыт от загрузки в контроллер, что мы можем наблюдать в остальной части кода. Кстати, если вы в дальнейшем планируете писать скетчи сами то, считается хорошим тоном оставлять описание параметров работы скетча и комментариев к функциям. Из описания которое оставил нам автор понятно следующее, что этот скетч заставляет встроенный в плату контроллера светодиод и привязанный к 13 цифровому пину, моргать с частотой в 1000 миллисекунд.

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

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

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

Для большего понимания работы этого скетча, давайте немного отредактируем код и посмотрим что изменилось. Переходим на 34 строку кода и изменим время паузы, delay(1000); изменим на delay(10000); .

В результате этих манипуляций программа работы нашего контроллера изменилась. И сейчас светодиод на контроллере загорается не на 1 секунду как это было при загрузке исходного кода, а на 10 секунд. Сейчас мы программно указали в 33 строчке включить светодиод и этот светодиод будет гореть до тех пор пока относительно него не поступит другой команды. Поэтому в 34 строчке мы ставим паузу в 10 секунд а в 35 строчке гасим светодиод. Должно получится что то вроде ниже представленного изображения.

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


Источник: kabel-house.ru