Скетчи для arduino uno

Скетчи для arduino uno

Вот и закончился базовый курс уроков программирования Arduino. Мы с вами изучили самые базовые понятия, вспомнили (или изучили) часть школьной программы по информатике, изучили большую часть синтаксиса и инструментов языка C++, и вроде бы весь набор Ардуино-функций, который предлагает нам платформа. Подчеркну – мы изучили C++ и функции Ардуино, потому что никакого “языка Arduino” нет, это ложное понятие. Arduino программируется на C или ассемблере, а платформа предоставляет нам всего лишь несколько десятков удобных функций для работы с микроконтроллером, именно функций, а не язык. Теперь перед нами чистый лист блокнота Arduino IDE и желание творить и программировать, давайте попробуем!

Структура программы

Прежде, чем переходить к реальным задачам, нужно поговорить о некоторых фундаментальных вещах. Микроконтроллер, как мы обсуждали в самом начале пути, это комплексное устройство, состоящее из вычислительного ядра, постоянной и оперативной памяти и различных периферийных устройств (таймеры/счётчики, АЦП и проч.). Обработкой нашего с вами кода занимается именно ядро микроконтроллера, оно раздаёт команды остальным “железкам”, которые в дальнейшем могут работать самостоятельно. Ядро выполняет различные команды, подгоняемое тактовым генератором: на большинстве плат Arduino стоит генератор с частотой 16 МГц. Каждый толчок тактового генератора заставляет вычислительное ядро выполнить следующую команду, таким образом Ардуино выполняет 16 миллионов операций в секунду. Много ли это? Для большинства задач более чем достаточно, главное использовать эту скорость с умом.

Зачем я об этом рассказываю: микроконтроллер может выполнить только одну задачу в один момент времени, так как у него только одно вычислительное ядро, поэтому реальной “многозадачности” нет и быть не может, но за счёт большой скорости выполнения ядро может выполнять задачи по очереди, и для человека это будет казаться многозадачностью, ведь что для нас “раз Миссисипи“, для микроконтроллера – 16 миллионов действий!

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

Помимо цикла у нас есть прерывания, которые позволяют реализовать некую “поточность” выполнения задач, особенно в тех ситуациях, когда важна скорость работы. Прерывание позволяет остановить выполнение основного цикла в любом его месте, отвлечься на выполнение некоторого блока кода, и после успешного его завершения вернуться к основному циклу и продолжить работу. Некоторые задачи можно решить только на прерываниях, не написав ни одной строчки в цикл loop()! Мы с вами изучали аппаратные прерывания, позволяющие прерваться при замыкании контактов. Такие прерывания являются внешними, то есть их провоцируют внешние факторы (человек нажал на кнопку, сработал датчик, и т.д.). Также у микроконтроллера есть внутренние прерывания, которые вызываются периферией микроконтроллера, и этих прерываний может быть не один десяток!

Одним из таких прерываний является прерывание таймера: по умолчанию Arduino IDE настраивает один из таймеров на счёт реального времени, благодаря этому у нас работают такие функции как millis() и micros(). Именно эти функции являются готовым инструментом для тайм-менеджмента нашего кода.

Многозадачность?

Большинство примеров к различным модулям/датчикам используют задержку delay() в качестве “торможения” программы, например для вывода данных с датчика в последовательный порт. Именно такие примеры портят восприятие новичка, и он тоже начинает использовать задержки. А на задержках далеко не уедешь!

Давайте вспомним конструкцию таймера на millis() из урока о функциях времени: у нас есть переменная, которая хранит время прошлого “срабатывания” таймера. Мы вычитаем это время из текущего времени, эта разница постоянно увеличивается, и по условию мы можем поймать тот момент, когда пройдёт нужное нам время. Будем учиться избавляться от delay()! Начнём с простого: классический blink:

Программа полностью останавливается на команде delay(), ждёт указанное время, а затем продолжает выполнение. Чем это плохо? (А вы ещё спрашиваете?) Во время этой остановки мы ничего не можем делать в цикле loop, например не сможем опрашивать датчик 10 раз в секунду: задержка не позволит коду пойти дальше. Можно использовать прерывания (например – таймера), но о них мы поговорим в продвинутых уроках. Сейчас давайте избавимся от задержки в самом простом скетче.

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

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

Что здесь происходит: цикл loop() выполняется несколько сотен тысяч раз в секунду, как ему и положено, потому что мы убрали задержку. Каждую свою итерацию мы проверяем, не настало ли время переключить светодиод, не прошла ли секунда? При помощи этой конструкции и создаётся нужная многозадачность, которой хватит для 99% всех мыслимых проектов, ведь таких “таймеров” можно создать очень много!

Читайте также:  Как сделать чтобы сканер сканировал в pdf

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

Это означает, что у нас спокойно работают 4 таймера с разным периодом срабатывания, работают “параллельно”, обеспечивая нам многозадачность: мы можем выводить данные на дисплей раз в секунду, и заодно опрашивать датчик 10 раз в секунду и усреднять его показания. Хороший пример для первого проекта! Давайте соберём простенькие метео-часы.

Как соединить несколько скетчей?

Сила Arduino как конструктора заключается в том, что абсолютно по любой железке вы сможете найти в Гугле подробное описание, библиотеку, схему подключения и пример работы: полностью готовый набор для интеграции в свой проект! Вернёмся к нашим метео-часам и попробуем “собрать” такой проект из скетчей-примеров, ведь именно для этого примеры и нужны! Нам понадобится:

  • Arduino NANO
  • Дисплей. Пусть будет LCD1602 с переходником на i2c
  • Модуль реального времени, возьмём DS3231
  • Термометр ds18b20

Начинаем гуглить информацию по подключению и примеру для каждой железки:

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

Качаем библиотеки для наших модулей и устанавливаем. Библиотеку дисплея нам дают прямо в статье: https://iarduino.ru/file/134.html, библиотеку для часов по своему опыту советую RTClib (та, что в статье – не очень удобная). В статье про датчик температуры нам рассказали про библиотеку DallasTemperature.h, ссылку – не дали. Ну чтож, поищем сами “DallasTemperature.h”, найдём по первой ссылке. Для неё нужна ещё библиотека OneWire, ссылку на неё дали в статье про термометр. Итого у нас должны быть установлены 4 библиотеки.

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

Вот и закончился базовый курс уроков программирования Arduino. Мы с вами изучили самые базовые понятия, вспомнили (или изучили) часть школьной программы по информатике, изучили большую часть синтаксиса и инструментов языка C++, и вроде бы весь набор Ардуино-функций, который предлагает нам платформа. Подчеркну – мы изучили C++ и функции Ардуино, потому что никакого “языка Arduino” нет, это ложное понятие. Arduino программируется на C или ассемблере, а платформа предоставляет нам всего лишь несколько десятков удобных функций для работы с микроконтроллером, именно функций, а не язык. Теперь перед нами чистый лист блокнота Arduino IDE и желание творить и программировать, давайте попробуем!

Структура программы

Прежде, чем переходить к реальным задачам, нужно поговорить о некоторых фундаментальных вещах. Микроконтроллер, как мы обсуждали в самом начале пути, это комплексное устройство, состоящее из вычислительного ядра, постоянной и оперативной памяти и различных периферийных устройств (таймеры/счётчики, АЦП и проч.). Обработкой нашего с вами кода занимается именно ядро микроконтроллера, оно раздаёт команды остальным “железкам”, которые в дальнейшем могут работать самостоятельно. Ядро выполняет различные команды, подгоняемое тактовым генератором: на большинстве плат Arduino стоит генератор с частотой 16 МГц. Каждый толчок тактового генератора заставляет вычислительное ядро выполнить следующую команду, таким образом Ардуино выполняет 16 миллионов операций в секунду. Много ли это? Для большинства задач более чем достаточно, главное использовать эту скорость с умом.

Зачем я об этом рассказываю: микроконтроллер может выполнить только одну задачу в один момент времени, так как у него только одно вычислительное ядро, поэтому реальной “многозадачности” нет и быть не может, но за счёт большой скорости выполнения ядро может выполнять задачи по очереди, и для человека это будет казаться многозадачностью, ведь что для нас “раз Миссисипи“, для микроконтроллера – 16 миллионов действий!

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

Читайте также:  Активировать short gi короткий защитный интервал

Помимо цикла у нас есть прерывания, которые позволяют реализовать некую “поточность” выполнения задач, особенно в тех ситуациях, когда важна скорость работы. Прерывание позволяет остановить выполнение основного цикла в любом его месте, отвлечься на выполнение некоторого блока кода, и после успешного его завершения вернуться к основному циклу и продолжить работу. Некоторые задачи можно решить только на прерываниях, не написав ни одной строчки в цикл loop()! Мы с вами изучали аппаратные прерывания, позволяющие прерваться при замыкании контактов. Такие прерывания являются внешними, то есть их провоцируют внешние факторы (человек нажал на кнопку, сработал датчик, и т.д.). Также у микроконтроллера есть внутренние прерывания, которые вызываются периферией микроконтроллера, и этих прерываний может быть не один десяток!

Одним из таких прерываний является прерывание таймера: по умолчанию Arduino IDE настраивает один из таймеров на счёт реального времени, благодаря этому у нас работают такие функции как millis() и micros(). Именно эти функции являются готовым инструментом для тайм-менеджмента нашего кода.

Многозадачность?

Большинство примеров к различным модулям/датчикам используют задержку delay() в качестве “торможения” программы, например для вывода данных с датчика в последовательный порт. Именно такие примеры портят восприятие новичка, и он тоже начинает использовать задержки. А на задержках далеко не уедешь!

Давайте вспомним конструкцию таймера на millis() из урока о функциях времени: у нас есть переменная, которая хранит время прошлого “срабатывания” таймера. Мы вычитаем это время из текущего времени, эта разница постоянно увеличивается, и по условию мы можем поймать тот момент, когда пройдёт нужное нам время. Будем учиться избавляться от delay()! Начнём с простого: классический blink:

Программа полностью останавливается на команде delay(), ждёт указанное время, а затем продолжает выполнение. Чем это плохо? (А вы ещё спрашиваете?) Во время этой остановки мы ничего не можем делать в цикле loop, например не сможем опрашивать датчик 10 раз в секунду: задержка не позволит коду пойти дальше. Можно использовать прерывания (например – таймера), но о них мы поговорим в продвинутых уроках. Сейчас давайте избавимся от задержки в самом простом скетче.

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

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

Что здесь происходит: цикл loop() выполняется несколько сотен тысяч раз в секунду, как ему и положено, потому что мы убрали задержку. Каждую свою итерацию мы проверяем, не настало ли время переключить светодиод, не прошла ли секунда? При помощи этой конструкции и создаётся нужная многозадачность, которой хватит для 99% всех мыслимых проектов, ведь таких “таймеров” можно создать очень много!

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

Это означает, что у нас спокойно работают 4 таймера с разным периодом срабатывания, работают “параллельно”, обеспечивая нам многозадачность: мы можем выводить данные на дисплей раз в секунду, и заодно опрашивать датчик 10 раз в секунду и усреднять его показания. Хороший пример для первого проекта! Давайте соберём простенькие метео-часы.

Как соединить несколько скетчей?

Сила Arduino как конструктора заключается в том, что абсолютно по любой железке вы сможете найти в Гугле подробное описание, библиотеку, схему подключения и пример работы: полностью готовый набор для интеграции в свой проект! Вернёмся к нашим метео-часам и попробуем “собрать” такой проект из скетчей-примеров, ведь именно для этого примеры и нужны! Нам понадобится:

  • Arduino NANO
  • Дисплей. Пусть будет LCD1602 с переходником на i2c
  • Модуль реального времени, возьмём DS3231
  • Термометр ds18b20

Начинаем гуглить информацию по подключению и примеру для каждой железки:

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

Качаем библиотеки для наших модулей и устанавливаем. Библиотеку дисплея нам дают прямо в статье: https://iarduino.ru/file/134.html, библиотеку для часов по своему опыту советую RTClib (та, что в статье – не очень удобная). В статье про датчик температуры нам рассказали про библиотеку DallasTemperature.h, ссылку – не дали. Ну чтож, поищем сами “DallasTemperature.h”, найдём по первой ссылке. Для неё нужна ещё библиотека OneWire, ссылку на неё дали в статье про термометр. Итого у нас должны быть установлены 4 библиотеки.

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

Читайте также:  После падения телефона не работает экран

Arduino, на самом деле, — это разработка уникальных проектов на все случаи жизни.

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

Невероятные проекты с Ардуино

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

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

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

Как его сделать мы разберем на одном из следующих уроков.

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

Скетчи Arduino

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

Setup

setup() – предусмотрено, что внутри данной функции, пользователь сможет задавать все ключевые настройки.

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

Запуск осуществляется строго один раз в течение всего скетча, когда отмечается сам старт выполнения данной программы.

loop() – представляет собой основную функцию, которая осуществляется непосредственно после запуска (как раз в этом случае используется setup()).

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

Примеры скетчей

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

Пример 1

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

Фактически, ничего особенно полезного в скетче нет, но в нем организована и возможность случайного вывода некоторой фразы «Data Received», она может использоваться в дальнейшем непосредственно для тестирования и анализа установленных правил работы модульного элемента.

Пример 2

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

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

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

Пример 3

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

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

Примеры использования Arduino

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

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

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

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

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

Ссылка на основную публикацию
Сетевой город 71 щекино школа 12
Запрошенная Вами страница не найдена. Возможно, Вы перешли по устаревшей ссылке или неверно ввели адрес. 2019 Электронное образование Министерство по...
Самый лучший музыкальный центр по звуку
На первый взгляд, сегодня мало кому в голову придет купить музыкальный центр себе домой, когда прослушивать музыку можно, просто подключив...
Самый лучший плеер для виндовс 7
Чтобы просмотр фильмов или прослушивание музыки за компьютером было действительно комфортным, необходимо скачать по-настоящему качественный проигрыватель. Ниже представлена подборка из...
Сетевой драйвер для ноутбука асер
Драйвера для ноутбуков и нетбуков Acer Поддерживаемые операционные системы: Windows 7 Для начала загрузки данного файла, найдите под пунктом номер...
Adblock detector