Программирование Arduino с помощью ArduBloсk на примере робота, движущегося по полосе


mBlock – отличная программа для обучения навыкам программирования роботов и Arduino, основанная на известной среде Scratch. Ее очень легко скачать, установить и настроить, она совершенно бесплатна и доступна на русском языке для операционных систем Mac OS, Windows, Android и iOS. Возможность создания скетчей визуальным способом может помочь начинающим освоить навыки программирования. В этой статьей мы собрали вместе полезные советы и подготовили краткий урок о том, как работать в mBlock Arduino.

Программа mBlock

Преимущества mBlock:

Да! Моя программа лучшая!

  • поддержка большинства плат Ардуино;
  • возможность использования собственных блоков с возможностями рекурсии;
  • простота использования библиотек и наработок в собственных проектах;
  • удобство создания своих программ;
  • можно изучать синтаксис языка программирования на базе mBlock.

Недостатки mBLock:

  • Иногда наблюдается нестабильность в интерактивном режиме;
  • Присутствуют потери контакта с микроконтроллером, из-за чего приходится перезагружать среду.

Visuino

Итак, что надо сделать. Выбираем компоненты (модули) с панели компонентов и перемещаем их в область проектирования. Затем их необходимо соединить и настроить свойства. Это делается с помощью инспектора объектов.

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

Когда ПЛК запрограммирован, графическая среда подсказывает доступный способ подключения к контроллеру. Это может быть последовательный порт, Ethernet, Wi-Fi или GSM.

Наконец ваш проект готов: все контроллеры прописаны, все работает. Теперь, нажав на логотип Arduino, расположенный на верхней панели, вы заставите Visuino создать коды для Arduino и открыть среду его разработки (Arduino IDE), через которую уже можно скомпилировать код и загрузить его в ПЛК.

Совет. Если установленная плата не соответствует вашему Arduino, вы можете изменить ее с помощью команды «Select Board» (Выбрать панель).

Настройка среды для работы c Arduino

После установки утилиты на ПК нужно сделать следующие настройки для дальнейшей работы c платами Ардуино:

  • Запустить программу mBlock.
  • Выбрать пункт в главном меню board, поставит галочку около нужной платы;
  • В верхнем меню language следует выбрать русский язык.
  • Затем в соединить – serial port нужно выбрать номер com порта, к которому подключен микроконтроллер. Если номер порта не был присвоен, нужно установить драйвер. В mBlock нужно выбрать connect – install arduino driver. Также драйвера можно найти в интернете, скачать и установить вручную.

На этом основные настройки закончены. Можно приступать к созданию программы.

Установка Ardublock

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

  1. Скачать архив с сайта ArduBlock
  2. Открыть Arduino IDE/Menu /Arduino/ Preferences, там вы найдете строку Sketchbook location
  3. Создайте папку “tools/ArduBlockTool/tool” внутри папки “Arduino” в строке “Sketch location” и скопируйте архив “ardublock-all.jar” в папку “tool”. Например, если имя пользователя “user”, то путь в среде Windows будет таким: “C:\Users\user\Documents\Arduino”
  4. Перезапустите Arduino IDE и у Вас должен появиться пункт “ArduBlock” в меню “Tool”

При установки на Mac для пользователя user путь будет следующим: “/Users/user/Documents/Arduino/tools/ArduBlockTool/tool/ardublock-all.jar” При установке на Linux: “/home/user/sketchbook/tools/ArduBlockTool/tool/ardublock-all.jar”

mBlock для программирования Arduino

Отличительные особенности:

  • Есть возможность подсоединения к микроконтроллеру и обновления его прошивки. Это выполняется в верхнем меню в программе. Такая функция значительно облегчает процесс – например, в S4A приходится скачивать специальные файлы, открывать их в Arduino IDE и загружать на сам контроллер. В mBlock все значительно проще.
  • В верхнем меню есть возможность выбора нужной платы.
  • Существует специальный ящик команд, который называется Робот. В нем содержатся различные блоки, помогающие считывать данные и управлять контроллером. Их можно комбинировать с командами из других ящиков.
  • Присутствует возможность генерирования кода Ардуино и редактирования его в среде Arduino IDE. Код создается из виртуального скрипта. Таким образом, можно визуально оценить, как работает та или иная команда в программе, и изучить синтаксис языка программирования.
  • Для работы существует специальный робот на базе Ардуино – mBot. К нему есть специальные обучающие материалы и инструкции, которые будут полезны новичкам любого возраста.

Основное отличие mBlock – простота и интерактивность программирования.

Что такое Ardublock?

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

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

У Ardublock есть и другие плюсы, помимо того, что он инструмент для начинающих программистов. Одна из его положительных сторон — возможность работать с блоками, чтобы быстрее создавать проекты.

Ardublock визуально работает с блоками, а также может работать с компонентами. Таким образом, мы можем создать блок, который является колесами, другой — музыкой, а другой — пластиной; каждый раз, когда мы хотим использовать эти блоки, мы даем ему имя или просто перетаскиваем его с одной стороны окна на другую сторону окна.

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

Описание блоков программы mBlock

Программирование mBlock простое и интуитивно понятное. В палитре «Скрипты» представлены различные блоки – элементарные команды. С их помощью можно создавать программу. Команды нужно перетащить на рабочее поле, чтобы создать свой проект.

Как это работает на примере робота mBot, двигающегося вперед-назад:

Как интересно!

  • MBot program – название программы.
  • Есть блок «Всегда» (forever) – в нем создается бесконечный цикл, внутри которого прописанные команды повторяются многократно до остановки.
  • Run forward at speed 100 (не переведен на русский язык). Позволяет вращать моторы робота, чтобы он двигался на скорости 100.
  • «Ждать 1 секунд» – блок ожидания. Робот будет перемещаться вперед 1 секунду. Во время движения программа ничего не делает и просто ждет, когда за это время робот преодолеет некоторое расстояние.
  • Run backward at speed 100 – команда для робота, чтобы он двигался назад на скорости 100.
  • Снова повторение «Ждать 1 секунд». Робот двигается назад в течение 1 секунды, перемещаясь на определенное расстояние.

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

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

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

Программирование Arduino с помощью ArduBloсk (скачать)

  • Уроки Информатики
  • Учителям
  • Учителям информатики

Arduino совместимые платы программируются на языке Wiring, который по синтаксису очень похож на Си. Однако мо моему личному опыту этот язык сложен для освоения ребятами в возрасте 11-13 лет, особенно если до этого ребята создавали программы в LabView перетаскивая блоки на рабочий стол. Многие, увлекающиеся робототехникой, ребята хорошо знакомы с визуальным языком программирования Scratch, на базе которого уже существует множество решений для образования. Среди подобных решений для Arduino создан инструмент написанный на языке Java под названием ArduBloсk.

Да, кто-то может сказать, что еще существует Scratch for Arduino (s4a) и он тоже очень простая графическая среда для программирования Arduino. Но Scratch не прошивает Arduino, а всего лишь управляет им посредством USB кабеля. Arduino зависим от компьютера и не может работать автономно. При создании собственных проектов автономность для Arduino — это главное, особенно при создании роботизированных устройств.

Итак, что же такое ArduBloсk? Это графическая среда программирования. Практически полностью переведена на русский язык. Но в ArduBloсk изюминка не только это, но и то, что написанную нами программу ArduBloсk конвертирует в код Arduino IDE. Эта программа встраивается в среду программирования Arduino IDE, т. е. это плагин! Ниже приведен пример мигающего светодиода и конвертированной программы в Arduino IDE. Вся работа с программой очень проста и разобраться в ней сможет любой школьник.

В результате работы на программе можно не только программировать Arduino, но и изучать непонятные нам команды в текстовом формате Arduino IDE, ну а если же «лень» писать стандартные команды — стоит быстрыми манипуляциями мышкой набросать простенькую программку в ArduBlok, а в Arduino IDE её отладить. Чтобы установить ArduBlok, необходимо выполнить инструкцию которая описана ниже, но все же вам придется совершить некоторые танцы с бубном, так как в последних версиях Arduino IDE этот плагин не работает. Если вы не желаете танцевать с бубнами, то предлагаю вам скачать архив с уже интегрированным инструментом ArduBloсk для Arduino IDE 1.6.11. Эта версия не требует установки. Вам нужно только разархивировать папку в удобное место и запустить Arduino IDE. И НЕ ЗАБУДЬТЕ установить виртуальную машину Java, она необходима для нормальной работы этого плагина , установка 1-2 минуты.

Скачать Arduino IDE 1.6.11 with ArduBloсk

Инструкция для танцев с бубном: Для начала загрузить и установить Arduino IDE с официального сайта Arduino и разобраться с настройками при работе с платой Arduino UNO. Как это сделать описано на том же сайте или же на Амперке, либо посмотреть на просторах YouTube. Ну, а когда со всем этим разобрались, необходимо скачать ArduBlok с официального сайта, вот ссылка. Затем, скачанный файл переименовываем в ardublock-all и в папке «документы». Создаем следующие папки: Arduino > tools > ArduBlockTool > tool и в последнюю кидаем скачанный и переименованный файл. ArduBlok работает на всех операционных системах, даже на Linux, проверял сам лично на XP, Win7, Win8, все примеры для Win7. Установка программы для всех систем одинакова.

Для того, чтобы работать в ArduBlok, необходимо запустить Arduino IDE. После чего заходим во вкладку Инструменты и там находим пункт ArduBlok, нажимаем на него — и вот она, цель наша.

Основано на статье: https://geektimes.ru/post/258834/ Программирование Arduino с помощью ArduBloсk на примере робота, движущегося по полосе.

Тэги: arduino

Пожалуйста, оцените статью

3.82 из 5. (Всего голосов:136)

3.1/5 stars (297 votes)

Все статьи раздела

Moodle. Тип вопроса Formulas.Moodle. Системы тестирования программ обучающихся

  • Коменты VK
  • Анонимные коменты, G+ или Facebook

comments powered by Disqus

Установка расширений

Для расширения функционала можно установить расширения. Одним из них является AdvancedArduino – оно может использоваться вместо стандартного Ардуино и выдавать дополнительные возможности в режиме Arduino Mode.

К таким возможностям относятся:

  • Графические блоки для функций min, max, map, pow и других, необходимых для преобразования значений.
  • Дополнительные графические команды для работы с шиной serial и serial
  • Названия блоков в соответствии с наименованиями библиотечных функций.
  • Применение блоков, позволяющих вставлять произвольные фрагменты кода на языке Wire.
  • Определение локальных и глобальных переменных параметров функций произвольного типа.

Установить расширение можно так:

2Среда разработки Programino

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

Однако помимо этого, данная IDE предлагает такой удобный способ быстрой разработки как автодополнение кода. То есть, вам не придётся постоянно лазить в справочник по командам и методам Arduino. Вы начинаете набирать код, и среда разработки предложит вам выбрать из доступных вариантов тот, который вам нужен. Например, вы набираете «digi» и IDE предлагает вам варианты: «digitalRead», «digitalWrite» и другие возможные.

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

Постарайтесь набирать скетч вручную, а не копировать и вставлять, чтобы прочувствовать удобство автодополнения кода Programino.

const int pinA = A5; void setup() { pinMode(pinA, INPUT); Serial.begin(19200); } void loop() { int r = analogRead(pinA); Serial.println(r); delay(100); }

Что ещё интересного предлагает Programino IDE? В данной среде разработки имеются несколько дополнительных полезных инструментов, доступных через меню Tools

. Например: блокнот, дизайнер LCD символов, преобразователь между DEC-BIN-HEX, терминал последовательного порта, аналоговый плоттер и другие.

. Это средство позволяет визуализировать вам то, что приходит в COM-порт от Arduino.

Для работы плоттера в скетче нужно активизировать последовательный порт на скорости 19200 кб/сек. Аналоговые данные выводятся на плоттер с помощью команды Serial.println().

Запустим аналоговый плоттер. Нажмём кнопку Connect для подключения к порту, к которому у нас подключён Arduino.

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

Перед записью скетча в память Arduino, следует указать тип используемой платы и порт, к которому она подключена через меню Hardware

.

Пример программы в mBlock

Давайте напишем свой первый проект в среде mBlock. В качестве примера будет рассмотрено мигание светодиодом. Сначала светоизлучающий диод нужно подключить к плате Ардуино. Ножки светодиода следует подключить к пинам 13 и GND.

Затем в mBlock пишется сама программа. Она выглядит следующим образом:

Блоки Ардуино и Forever являются обязательными. Также есть блоки, в которых указывается, к каким пинам подключен светодиод. В данном случае к 13 пину подается то высокое, то низкое напряжение, из-за чего диод то загорается, то гаснет.

Суть блока проста – цикл должен повторяться бесконечно. В программе используются задержки для приостановки. Интервал составляет 1 секунду.

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

Что делать и как писать дальше?

Если вы новичок и только погружаетесь в язык – лучше писать как пишется. Хорошим тоном считается минимальное количество, а лучше вообще отсутствие глобальных переменных для всей программы: очень часто глобальную можно сделать локальной статической и спрятать её от остального кода, не потеряв работоспособность. Отдельные и самостоятельные части программы (опрос кнопок, обработка значений, отправка и парсинг данных, и т.п.) можно обернуть в класс, вынести в отдельный файл и сократить таким образом код основной программы, увеличив его читаемость и структурированность. Но не забывайте о том, что одну и ту же задачу можно решить бесконечным количеством способов, и далеко не все из них оптимальны. Если в программе есть одинаковые “блоки”, требующие одинакового набора переменных – будет гораздо удобнее обернуть их в класс. Более того, со временем накопится свой набор таких мини-библиотек и их будет очень удобно использовать в дальнейшей работе. У меня в уроках есть урок по классам и по написанию библиотек, но там разобрана лишь небольшая и самая основная часть возможностей ООП. Для написания мощных и универсальных инструментов изучайте любые уроки С++, после изучения моих уроков вы уже будете к ним готовы и там всё будет понятно. Также классы в C++ имеют такую мощную фишку, как наследование: один класс может наследовать возможности другого класса. Например, практически все библиотеки дисплеев, а также Serial и soft Serial имеют “всеядный” метод print(), который выводит переменные любых типов, умеет показывать число в разном представлении, форматировать вывод float чисел и прочее прочее. Интересный момент здесь в том, что все эти возможности реализованы в стандартном классе Print, который лежит среди остальных файлов в ядре Arduino IDE, и все остальные библиотеки просто наследуют все возможности вывода из него. Фактически в библиотеке дисплея/Serial должен быть реализован только write(), а абсолютно вся остальная универсальность вывода обеспечивается “сотрудничеством” с классом Print. В данном цикле уроков мы не будем разбирать наследование и другие инструменты ООП, потому что оно вряд-ли вам даже пригодится и уже прекрасно разобрано в любой книжке или любых уроках по C++ в интернете (мне нравятся уроки на сайте Ravesli). Оборачивание в класс не является панацеей: если кусок программы не подразумевает создание и использование нескольких экземпляров себя, то его можно просто поместить его в отдельный файл, как набор функций и переменных. Глобальные переменные в этом случае следует делать статическими, чтобы их “не было видно” из других файлов программы. Зачем и как с этим работать? При создании крупных проектов (да и вообще) следует придерживаться концепции “данные отдельно, код отдельно”, то есть глобальных переменных, которые находятся в области определения всей программы, быть не должно, как минимум их количество должно быть сведено к минимуму. Глобальные переменные могут быть спрятаны внутри файла, что обеспечивается ключевым словом static (переменные должны быть объявлены в .c или .cpp файле!), а делиться их значениями с остальным кодом программы и устанавливать новое значение можно при помощи отдельных функций. Как пример очень крупного проекта, сделанного с понятной файловой структурой и без использования ООП и классов – прошивка GRBL. Также большинство глобальных переменных можно запрятать внутри функций, где они нужны (то есть если они нужны только внутри конкретной функции) опять же при помощи static. Об этом мы говорили в самом начале, в уроке о типах данных.

Пример 1

Давайте рассмотрим пример превращения ужасного “винигретного” кода с кучей глобальных переменных и бардаком в главном цикле в понятную программу с отдельными независимыми подпрограммами. В этом примере у нас подключены две кнопки (на пины D2 и D3) и светодиод (используем бортовой на пине D13). Напишем программу, которая будет мигать светодиодом и асинхронно опрашивать кнопки с программным гашением дребезга контактов. При помощи кнопок можно будет изменять частоту мигания светодиода. Подробно комментировать код нет смысла, потому что все используемые конструкции мы не раз разбирали в цикле уроков.

Плохой код

// пины const byte btn1 = 2; const byte btn2 = 3; const byte led = 13; // шаг изменения const int step = 50; // таймеры дебаунса кнопок uint32_t btn1Tmr; uint32_t btn2Tmr; // флаги опроса кнопок bool btn1Flag; bool btn2Flag; // переменные для светодиода uint32_t ledTmr; int ledPeriod = 1000; // начальный период 1 секунда bool ledState = false; void setup () { // настраиваем пины pinMode(btn1, INPUT_PULLUP); pinMode(btn2, INPUT_PULLUP); pinMode(led, OUTPUT); } void loop() { // таймер светодиода if (millis() — ledTmr >= ledPeriod) { ledTmr = millis(); ledState = !ledState; digitalWrite(led, ledState); } // опрос первой кнопки с дебаунсом 100мс bool btn1State = digitalRead(btn1); if (!btn1State && !btn1Flag && millis() — btn1Tmr >= 100) { btn1Flag = true; btn1Tmr = millis(); ledPeriod += step; // увеличить период } if (btn1State && btn1Flag && millis() — btn1Tmr >= 100) { btn1Flag = false; btn1Tmr = millis(); } // опрос второй кнопки с дебаунсом 100мс bool btn2State = digitalRead(btn2); if (!btn2State && !btn2Flag && millis() — btn2Tmr >= 100) { btn2Flag = true; btn2Tmr = millis(); ledPeriod -= step; // уменьшить период } if (btn2State && btn2Flag && millis() — btn2Tmr >= 100) { btn2Flag = false; btn2Tmr = millis(); } }

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

button.h

// класс кнопки #pragma once #include #define _BTN_DEB_TIME 100 // таймаут антидребезга class Button { public: Button (byte pin) : _pin(pin) { pinMode(_pin, INPUT_PULLUP); } bool click() { bool btnState = digitalRead(_pin); if (!btnState && !_flag && millis() — _tmr >= _BTN_DEB_TIME) { _flag = true; _tmr = millis(); return true; } if (btnState && _flag && millis() — _tmr >= _BTN_DEB_TIME) { _flag = false; _tmr = millis(); } return false; } private: const byte _pin; uint32_t _tmr; bool _flag; };

Обработчик кнопки теперь работает следующим образом: возвращает true, если соответствующая кнопка была нажата. В основной программе мы поместим метод click() в условие и будем изменять период светодиода по нему. Я планирую, что в этом проекте у меня будет только один мигающий светодиод, и оборачивать его в класс не буду: просто вынесу функции в файл (для примера реализации проекта таким способом).

led.h

// мигающий светодиод #pragma once #include void LEDinit(byte pin, int period); void LEDblink(); void LEDadjust(int val);

led.cpp

#include «led.h» // статические переменные будут «видны» только в этом файле static int _period; static byte _pin; static uint32_t _tmr; static bool _flag; void LEDinit(byte pin, int period) { _pin = pin; _period = period; pinMode(_pin, OUTPUT); } void LEDblink() { if (millis() — _tmr >= _period) { _tmr = millis(); _flag = !_flag; digitalWrite(_pin, _flag); } } void LEDadjust(int val) { _period += val; }

Заметьте, что внутри файлов я использовал переменные с одинаковыми именами, но эти переменные я сделал либо статическими, либо спрятал в класс. Это очень удобно, потому что они никогда не пересекутся друг с другом и можно использовать одинаковые для обозначения переменных с схожим смыслом. Таким образом мы получили два обособленных модуля, две отдельных подпрограммы, с которыми можно взаимодействовать из основой программы. Изменение периода мигания светодиода я сделал через функцию LEDadjust(), которая принимает поправку к текущей величине. Начальная “текущая” величина задаётся при инициализации в LEDinit(). Ну чтож, положим наши библиотеки рядом с основным файлом программы, подключим их в код и посмотрим, как теперь выглядит наш проект: // шаг изменения const int step = 50; // библиотека светодиода #include «led.h» // библиотека кнопки #include «button.h» Button btn1(2); Button btn2(3); void setup() { // указываем пин и стартовый период LEDinit(13, 1000); } void loop() { LEDblink(); // мигаем if (btn1.click()) LEDadjust(step); if (btn2.click()) LEDadjust(-step); }

Ну вот, совсем другое дело! Теперь мухи у нас отдельно от котлет и можно аккуратно заниматься доработкой обоих модулей независимо друг от друга. Кстати, что по поводу размера кода? Самый первый пример занимает 1306 байт Flash и 26 байт оперативки, а новый… 1216 байт Flash и 29 байт оперативки. Объём кода (количество строк) увеличился, но его вес уменьшился на 100 байт! Дело в том, что у нас два экземпляра кнопки, которые опрашиваются по сути одинаково. Мы сделали опрос как метод класса, и компилятор не продублировал его на разные кнопки. Давайте чуть разовьём программу и добавим ещё одну кнопку, при помощи которой можно будет включать и выключать светодиод, для чего добавим такую возможность в его библиотеку. А классу кнопки добавим метод, который будет возвращать true импульсно при удержании кнопки, чтобы менять частоту удержанием кнопки соответственно. В обработчик кнопки добавим хитрое условие, которое будет возвращать true по таймеру, если кнопка удерживается, то есть ещё не была отпущена после нажатия. Таким образом можно будет изменять величину однократно “кликом”, либо удерживать и она будет изменятся ступенчато, как в любых китайских часах.

button.h

// класс кнопки #pragma once #include #define _BTN_DEB_TIME 100 // таймаут антидребезга #define _BTN_HOLD_TIME 400 // таймаут импульсного удержания class Button { public: Button (byte pin) : _pin(pin) { pinMode(_pin, INPUT_PULLUP); } bool click() { bool btnState = digitalRead(_pin); if (!btnState && !_flag && millis() — _tmr >= _BTN_DEB_TIME) { _flag = true; _tmr = millis(); return true; } if (!btnState && _flag && millis() — _tmr >= _BTN_HOLD_TIME) { _tmr = millis(); return true; } if (btnState && _flag && millis() — _tmr >= _BTN_DEB_TIME) { _flag = false; _tmr = millis(); } return false; } private: const byte _pin; uint32_t _tmr; bool _flag; };

Реализовать включение-выключение светодиода как “статус” всего программного модуля можно при помощи флага (основной метод blink() будет выполняться по нему), добавим его в переменные. Дергать флаг можно несколькими способами:

  • Сделать функцию toggle(), которая будет просто инвертировать флаг
  • Сделать функции enable() и disable(), которые будут включать и выключать флаг соответственно
  • Сделать установку и чтение текущего состояния

И так далее. Остановимся на ручной установке и чтении состояния как универсальном варианте.

led.h

// мигающий светодиод #pragma once #include void LEDinit(byte pin, int period); void LEDblink(); void LEDadjust(int val); void LEDsetState(bool state); bool LEDgetState();

led.cpp

#include «led.h» // статические переменные будут «видны» только в этом файле static int _period; static byte _pin; static uint32_t _tmr; static bool _flag; static bool _state = true; void LEDinit(byte pin, int period) { _pin = pin; _period = period; pinMode(_pin, OUTPUT); } void LEDblink() { if (_state && millis() — _tmr >= _period) { _tmr = millis(); _flag = !_flag; digitalWrite(_pin, _flag); } } void LEDadjust(int val) { _period += val; } void LEDsetState(bool state) { _state = state; if (_state) digitalWrite(_pin, 0); } bool LEDgetState() { return _state; }

В основную программу добавим ещё одну кнопку на пин D4 и будем переключать состояние светодиода: // шаг изменения const int step = 50; // библиотека светодиода #include «led.h» // библиотека кнопки #include «button.h» Button btn1(2); Button btn2(3); Button btn3(4); void setup() { // указываем пин и стартовый период LEDinit(13, 1000); } void loop() { LEDblink(); // мигаем if (btn1.click()) LEDadjust(step); if (btn2.click()) LEDadjust(-step); if (btn3.click()) LEDsetState(!LEDgetState()); }

Теперь кнопки на пинах 2 и 3 кликом увеличивают и уменьшают частоту мигания светодиода, при удержании частота меняется автоматически с тем же шагом и настроенным в button.h периоде, а кликом по кнопке на пине 4 мы можем включить или выключить процесс мигания. Таким образом у нас уже получились некоторые наработки, которые можно целиком, прямо файлом, вставить в другой проект и использовать. В этом и состоит прелесть ООП и вообще концепции отделения данных от кода и отказа от глобальных переменных для всей программы.

Пример 2

Далее давайте вспомним пример с метеостанцией из урока как написать скетч и попробуем его немного “причесать”: обернём всё в классы, раскидаем по отдельным файлам и отделим данные друг от друга. Хотя всё же сделаем класс для таймера на миллис, потому что там он используется в трёх местах, и при дальнейшей доработке могут понадобиться ещё таймеры. Исходный проект занимает 10078 байт Flash и 511 RAM.

Метеостанция

// НАСТРОЙКИ #define ONE_WIRE_BUS 2 // пин ds18b20 // БИБЛИОТЕКИ #include #include #include #include #include // ОБЪЕКТЫ И ПЕРЕМЕННЫЕ // адрес может быть 0x27 или 0x3f LiquidCrystal_I2C lcd(0x3f, 16, 2); // Устанавливаем дисплей RTC_DS3231 rtc; OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); uint32_t myTimer1, myTimer2, myTimer3; boolean LEDflag = false; float tempSum = 0, temp; byte tempCounter; void setup() { Serial.begin(9600); // для отладки pinMode(13, 1); // дисплей lcd.init(); lcd.backlight(); // Включаем подсветку дисплея // термометр sensors.begin(); sensors.setWaitForConversion(false); // асинхронное получение данных // часы rtc.begin(); // установка времени равному времени компиляции if (rtc.lostPower()) { rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); } } void loop() { // 2 раза в секунду if (millis() — myTimer1 >= 500) { myTimer1 = millis(); // сбросить таймер toggleLED(); } // 5 раз в секунду if (millis() — myTimer2 >= 200) { myTimer2 = millis(); // сбросить таймер getTemp(); } // каждую секунду if (millis() — myTimer3 >= 1000) { myTimer3 = millis(); // сбросить таймер redrawDisplay(); } } void toggleLED() { digitalWrite(13, LEDflag); // вкл/выкл LEDflag = !LEDflag; // инвертировать флаг } void getTemp() { // суммируем температуру в общую переменную tempSum += sensors.getTempCByIndex(0); sensors.requestTemperatures(); // счётчик измерений tempCounter++; if (tempCounter >= 5) { // если больше 5 tempCounter = 0; // обнулить temp = tempSum / 5; // среднее арифметическое tempSum = 0; // обнулить } } void redrawDisplay() { // ВРЕМЯ DateTime now = rtc.now(); // получить время lcd.setCursor(0, 0); // курсор в 0,0 lcd.print(now.hour()); // часы lcd.print(‘:’); // первый ноль для красоты if (now.minute() < 10) lcd.print(0); lcd.print(now.minute()); lcd.print(‘:’); // первый ноль для красоты if (now.second() < 10) lcd.print(0); lcd.print(now.second()); // TEMP lcd.setCursor(11, 0); // курсор в 11,0 lcd.print(«Temp:»); lcd.setCursor(11, 1); // курсор в 11,1 lcd.print(temp); // ДАТА lcd.setCursor(0, 1); // курсор в 0,1 // первый ноль для красоты if (now.day() < 10) lcd.print(0); lcd.print(now.day()); lcd.print(‘.’); // первый ноль для красоты if (now.month() < 10) lcd.print(0); lcd.print(now.month()); lcd.print(‘.’); lcd.print(now.year()); }

Итак, я обернул всё в классы, а объекты подключаемых внешних библиотек сделал статическими, чтобы их было “не видно” из основной программы и они не могли ни с чем перемешаться. Дисплея я трогать не стал, весь вывод на него остался как был, сам дисплей “подключается” в основном скетче.

Основной скетч

// БИБЛИОТЕКИ #include #include LiquidCrystal_I2C lcd(0x27, 16, 2); // Устанавливаем дисплей #include «led.h» Led led(13); // светодиод на пине 13 #include «timer.h» Timer ledTimer(500); // таймер светодиода на 500 мс Timer tempTimer(800); // таймер датчика 800 мс Timer displayTimer(1000); // вывод на дисплей 1 сек #include «realTime.h» RealTime rtc; #include «temperature.h» Temperature dallas; void setup() { Serial.begin(9600); // для отладки dallas.begin(); rtc.begin(); lcd.init(); lcd.backlight(); // Включаем подсветку дисплея } void loop() { if (ledTimer.ready()) led.toggle(); if (tempTimer.ready()) dallas.filter(); if (displayTimer.ready()) redrawDisplay(); } void redrawDisplay() { // ВРЕМЯ rtc.update(); // получить время lcd.setCursor(0, 0); // курсор в 0,0 lcd.print(rtc.hour()); // часы lcd.print(‘:’); // первый ноль для красоты if (rtc.minute() < 10) lcd.print(0); lcd.print(rtc.minute()); lcd.print(‘:’); // первый ноль для красоты if (rtc.second() < 10) lcd.print(0); lcd.print(rtc.second()); // TEMP lcd.setCursor(11, 0); // курсор в 11,0 lcd.print(«Temp:»); lcd.setCursor(11, 1); // курсор в 11,1 lcd.print(dallas.get()); // ДАТА lcd.setCursor(0, 1); // курсор в 0,1 // первый ноль для красоты if (rtc.day() < 10) lcd.print(0); lcd.print(rtc.day()); lcd.print(‘.’); // первый ноль для красоты if (rtc.month() < 10) lcd.print(0); lcd.print(rtc.month()); lcd.print(‘.’); lcd.print(rtc.year()); }

led.h

#pragma once #include // класс светодиода class Led { public: // создать с указанием пина Led (byte pin) { _pin = pin; pinMode(_pin, OUTPUT); } // переключить состояние void toggle() { _state = !_state; digitalWrite(_pin, _state); } private: byte _pin; bool _state; };

timer.h

#pragma once #include // класс таймера на миллис class Timer { public: // создать с указанием периода Timer (int period) { _period = period; } // возвращает true когда сработал период bool ready() { if (millis() — _tmr >= _period) { _tmr = millis(); return true; } return false; } private: uint32_t _tmr; int _period; };

realTime.h

#pragma once #include #include #include class RealTime { public: void begin(); void update(); byte hour(); byte minute(); byte second(); byte day(); byte month(); int year(); private: byte _h, _m, _s; byte _day, _month; int _year; };

realTime.cpp

#include «realTime.h» static RTC_DS3231 rtc; void RealTime::begin() { rtc.begin(); // установка времени равному времени компиляции if (rtc.lostPower()) { rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); } } void RealTime::update() { DateTime now = rtc.now(); _h = now.hour(); _m = now.minute(); _s = now.second(); _day = now.day(); _month = now.month(); _year = now.year(); } byte RealTime::hour() { return _h; } byte RealTime::minute() { return _m; } byte RealTime::second() { return _s; } byte RealTime::day() { return _day; } byte RealTime::month() { return _month; } int RealTime::year() { return _year; }

temperature.h

#pragma once // класс опроса и фильтрации датчика #define ONE_WIRE_BUS 2 // пин ds18b20 #include #include #include class Temperature { public: void begin(); void filter(); float get(); private: float tempSum = 0, temp = 0; byte tempCounter = 0; };

temperature.cpp

#include «temperature.h» static OneWire oneWire(ONE_WIRE_BUS); static DallasTemperature sensors(&oneWire); void Temperature::begin() { // термометр sensors.begin(); sensors.setWaitForConversion(false); // асинхронное получение данных } void Temperature::filter() { // суммируем температуру в общую переменную tempSum += sensors.getTempCByIndex(0); sensors.requestTemperatures(); // счётчик измерений tempCounter++; if (tempCounter >= 5) { // если больше 5 tempCounter = 0; // обнулить temp = tempSum / 5; // среднее арифметическое tempSum = 0; // обнулить } } float Temperature::get() { return temp; }

Да, кода стало сильно больше, писали мы его дольше, занимает он теперь 10322 и 539 байт Flash и RAM соответственно (на 240 и 28 байт больше), но наш
скетч превратился в полноценный проект: можно заниматься доработкой каждого “модуля” отдельно и не бояться вмешаться в основной код, можно очень удобно заменить датчик или часы реального времени на любые другие и так далее! С таким кодом будет приятно и понятно работать даже спустя несколько лет, когда всё забудется, да и другому человеку будет проще в нём разобраться. В этом и состоит основная суть такого подхода к написанию крупных программ.

mBlock 5.0.1

Версия 5.0.1 с новым дизайном и более хорошей графикой, чем предыдущая версия, а так же с новой версией Scratch занимает хорошее место на рынке ПО для Ардуино. Но так как она еще на стадии разработки, можно предположить, (или даже с уверенностью сказать) что будут и другие апгрейды mBlock 5.

Сравнение версий

У mBlock 5 есть несколько отличий от mBlock 3:

  • Стала лучше графика
  • Все блоки переведены на русский язык
  • Есть возможность переносить программу mBlock в Piton.
  • Новый дизайн, который выглядит привлекательнее, чем прошлый

Альтернативы Ardublock

Хотя Ardublock может показаться чем-то новым и уникальным для Arduino, правда в том, что это не единственная программа или инструмент, который мы должны выполнять для визуального программирования. Существует несколько инструментов, которые ориентированы на визуальное программирование до такой степени, что все альтернативы Ardublock — это уникальные программы, а не расширения или плагины для Arduino IDE.

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

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

Третий из инструментов еще недостаточно хорошо освоен, но это многообещающий инструмент в инструментах визуального программирования. Этот инструмент называется Модкит, инструмент который родился на Kickstarter, но постепенно развивается и отлично развивается. Отличие от других программ может больше специализируется на начинающих пользователях, чем на продвинутых.. Наконец, другой альтернативой Ardublock могло бы быть традиционное использование Arduino IDE, альтернативы, которая не является визуальной и будет доступна только самым опытным программистам.

3Среда разработки B4R (Basic for Arduino)

Логотип B4R
Ещё одна интересная альтернатива Arduino IDE – B4R, или «Basic for Arduino». Эта среда разработки уникальна тем, что использует язык Basic, а не Си. Она также поддерживает функцию автодополнения кода. Кроме того, она полностью бесплатна.

При первом запуске среда B4R также требует указать путь к директории с Arduino IDE и, при необходимости, дополнительным нестандартным библиотекам и общим модулям. Эти настройки можно задать и позже через меню Tools Configure Paths

.

:

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

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

Установка и запуск среды разработки FLprog

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

Далее следует стандартная установка пакетов программ.

Запускаем:

Нам предлагаю выбрать проект для SCADA или для контроллера. Для начала рассмотрим проект для контроллера:

Тут в принципе есть два языка программирования по стандарту МЭК — лестничные диаграммы, релейная схема (LD), либо графические блоки (FBD). Кому как удобно, кто как привык. Я выбираю FBD.

С левой стороны дерево проектов, посередине полотно, с правой стороны свойства и все необходимые элементы.

Чем-то очень напоминает вот это (оболочка CoDeSyS 3.5)

Или вот это (оболочка Owen Logic ПР110)

Arduino.ru

Скачать

Последнюю версию можно найти по этой ссылке https://www.arduino.cc/en/Main/Software

Полезные ссылки:

  • Начало работы в Windows
  • Установка Arduino IDE на Ubuntu Linux

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

Verify/Compile Проверка программного кода на ошибки, компиляция.

Stop Остановка мониторинга последовательной шины(Serial monitor) или затемнение других кнопок.

New Создание нового скетча.

Open Открытие меню доступа ко всем скетчам в блокноте. Открывается нажатием в текущем окне.

Примечание: из-за наличия ошибки в Java данное меню не может прокручиваться; при необходимости открыть скетч из этого списка проследуйте в меню File | Sketchbook.

Save Сохранение скетча.

Upload to I/O Board Компилирует программный код и загружает его в устройство Arduino. Описание загрузки приведено ниже.

Serial Monitor Открытие мониторинга последовательной шины (Serial monitor).

Дополнительные команды сгруппированы в пять меню: File, Edit, Sketch, Tools, Help. Доступность меню определяется работой, выполняемой в данный момент.

Edit

  • Copy for Discourse Копирует в буфер обмена подходящий для размещения на форуме код скетча с выделением синтаксиса.
  • Copy as HTML Копирует код скетча в буфер обмена как HTML код, для размещения на веб-страницах.

Sketch

  • Verify/Compile Проверка скетча на ошибки.
  • Import Library Добавляет библиотеку в текущий скетч, вставляя директиву #include в код скетча. Подробная информация в описании библиотек ниже (Libraries).
  • Show Sketch Folder Открывает папку, содержащую файл скетча, на рабочем столе.
  • Add File… Добавляет файл в скетч (файл будет скопирован из текущего места расположения). Новый файл появляется в новой закладке в окне скетча. Файл может быть удален из скетча при помощи меню закладок.

Tools

  • Auto Format Данная опция оптимизирует код, например, выстраивает в одну линию по вертикали открывающую и закрывающую скобки и помещает между ними утверждение.
  • Board Выбор используемой платформы. Список с описанием платформ приводится ниже.
  • Serial Port Меню содержит список последовательных устройств передачи данных (реальных и виртуальных) на компьютере. Список обновляется автоматически каждый раз при открытии меню Tools.
  • Burn Bootloader Пункты данного меню позволяют записать Загрузчик (Bootloader) в микроконтроллер на платформе Arduino. Данное действие не требуется в текущей работе с Arduino, но пригодится, если имеется новый ATmega (без загрузчика). Перед записью рекомендуется проверить правильность выбора платформы из меню. При использовании AVR ISP необходимо выбрать соответствующий программатору порт из меню Serial Port.
Блокнот (Sketchbook)

Средой Arduino используется принцип блокнота: стандартное место для хранения программ (скетчей). Скетчи из блокнота открываются через меню File > Sketchbook или кнопкой Open на панели инструментов. При первом запуске программы Arduino автоматически создается директория для блокнота. Расположение блокнота меняется через диалоговое окно Preferences.

Закладки, Файлы и Компиляция

Позволяют работать с несколькими файлами скетчей (каждый открывается в отдельной закладке). Файлы кода могут быть стандартными Arduino (без расширения), файлами С (расширение *.с), файлами С++ (*.срр) или головными файлами (.h).

Загрузка скетча в Arduino

Перед загрузкой скетча требуется задать необходимые параметры в меню Tools > Board и Tools > Serial Port. Платформы описываются далее по тексту. В ОС Mac последовательный порт может обозначаться как dev/tty.usbserial-1B1 (для платы USB) или /dev/tty.USA19QW1b1P1.1 (для платы последовательной шины, подключенной через адаптер Keyspan USB-to-Serial). В ОС Windows порты могут обозначаться как COM1 или COM2 (для платы последовательной шины) или COM4, COM5, COM7 и выше (для платы USB). Определение порта USB производится в поле Последовательной шины USB Диспетчера устройств Windows. В ОС Linux порты могут обозначаться как /dev/ttyUSB0, /dev/ttyUSB1.

После выбора порта и платформы необходимо нажать кнопку загрузки на панели инструментов или выбрать пункт меню File > Upload to I/O Board. Современные платформы Arduino перезагружаются автоматически перед загрузкой. На старых платформах необходимо нажать кнопку перезагрузки. На большинстве плат во время процесса будут мигать светодиоды RX и TX. Среда разработки Arduino выведет сообщение об окончании загрузки или об ошибках.

При загрузке скетча используется Загрузчик (Bootloader) Arduino, небольшая программа, загружаемая в микроконтроллер на плате. Она позволяет загружать программный код без использования дополнительных аппаратных средств. Загрузчик (Bootloader) активен в течении нескольких секунд при перезагрузке платформы и при загрузке любого из скетчей в микроконтроллер. Работа Загрузчика (Bootloader) распознается по миганию светодиода (13 пин) (напр.: при перезагрузке платы).

Библиотеки

Библиотеки добавляют дополнительную функциональность скетчам, например, при работе с аппаратной частью или при обработке данных. Для использования библиотеки необходимо выбрать меню Sketch > Import Library. Одна или несколько директив #include будут размещены в начале кода скетча с последующей компиляцией библиотек и вместе со скетчем. Загрузка библиотек требует дополнительного места в памяти Arduino. Неиспользуемые библиотеки можно удалить из скетча убрав директиву #include.

На Arduino.cc имеется список библиотек. Некоторые библиотеки включены в среду разработки Arduino. Другие могут быть загружены с различных ресурсов. Для установки скачанных библиотек необходимо создать директорию «libraries» в папке блокнота и затем распаковать архив. Например, для установки библиотеки DateTime ее файлы должны находится в подпапке /libraries/DateTime папки блокнота.

Смотрите данную инструкцию для написания собственной библиотеки.

Аппаратные средства других разработчиков

Поддерживаемые аппаратные средства других производителей добавляются в соответствующую подпапку папки блокнота. Устанавливаемые платформы могут включать собственные характеристики (в меню платформы), корневые библиотеки, загрузчик(Bootloader) и характеристики программатора. Для установки требуется распаковать архив в созданную папку. (Запрещено использовать наименование папки «arduino», т.к. могут быть перезаписаны встроенные данные платформы Arduino.) Для деинсталляции данных удаляется соответствующая директория.

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

Мониторинг последовательной шины (Serial Monitor)

Отображает данные посылаемые в платформу Arduino (плата USB или плата последовательной шины). Для отправки данных необходимо ввести текст и нажать кнопку Send или Enter. Затем выбирается скорость передачи из выпадающего списка, соответствующая значению Serial.begin в скетче. На ОС Mac или Linux платформа Arduino будет перезагружена (скетч начнется сначала) при подключении мониторинга последовательной шины.

Имеется возможность обмена информацией с платформой через программы Processing, Flash, MaxMSP и т.д. (см. подробности на странице описаний интерфейсов).

Настройки

Некоторые настройки изменяются в окне Preferences (меню Arduino в ОС Mac или File в ОС Windows и Linux). Остальные настройки находятся в файле, месторасположение которого указано в окне Preferences.

Платформы

Выбор платформы влияет на: параметры (напр.: скорость ЦП и скорость передачи данных), используемые при компиляции и загрузке скетчей и на настройки записи загрузчика (Bootloader) микроконтреллера. Некоторые характеристики платформ различаются только по последнему параметру (загрузка Bootloader), таким образом, даже при удачной загрузке с соответствующим выбором может потребоваться проверка различия перед записью загрузчика (Bootloader).

  • Arduino Duemilanove или Nano с ATmega328 Тактовая частота ATmega328 16 МГц с возможностью автоматической перезагрузки. Используется для версий Arduino Pro или Pro Mini с ATmega328 на частоте 16 МГц (5 В).
  • Arduino Diecimila, Duemilanove, или Nano с ATmega168 Тактовая частота ATmega168 16 МГц с возможностью автоматической перезагрузки. Компиляция и загрузка соответствует Arduino NG или старым версиям с ATmega168, но загрузка Bootloader имеет короткий таймаут (при перезагрузке светодиод пина 13 мигает один раз). Используется для версий Arduino Pro и Pro Mini с ATmega168 на частоте 16 МГц (5 В).
  • Arduino Mega Тактовая частота ATmega1280 16 МГц с возможностью автоматической перезагрузки.
  • Arduino Mini Соответствует Arduino NG или старым версиям с ATmega168 (напр.: тактовая частота ATmega168 16 МГц без возможности автоматической перезагрузки).
  • Arduino BT Тактовая частота ATmega168 16 МГц. Загрузка Bootloader происходит совместно с кодами для инициализации модуля Bluetooth.
  • LilyPad Arduino с ATmega328 Тактовая частота ATmega328 8 МГц (3.3 В) с возможность автоматической перезагрузки. Соответствует Arduino Pro или Pro Mini (3.3 В, 8 МГц) с ATmega328.
  • LilyPad Arduino с ATmega168 Тактовая частота ATmega168 8 МГц.
    Компиляция и загрузка соответствует Arduino Pro или Pro Mini (8 МГц) с ATmega168.

    Загруженный Bootloader имеет длинный таймаут (при перезагрузке светодиод пина 13 мигает три раза), т.к. оригинальные версии LilyPad не поддерживают автоматическую перезагрузку. Также не поддерживаются внешние часы и, следовательно, Bootloader конфигурирует загрузку внутренних 8 МГц часов в ATmega168.

    При наличии поздних версий LilyPad (с 6-контакным программным вводом) перед загрузкой Bootloader требуется выбрать Arduino Pro или Pro Mini (8 MHz) с ATmega168.

  • Arduino Pro или Pro Mini (3.3 В, 8 МГц) с ATmega328 Тактовая частота ATmega328 8 МГц (3.3 В) с возможность автоматической перезагрузки. Соответствует LilyPad Arduino с ATmega328.
  • Arduino Pro или Pro Mini (3.3 В, 8 МГц) с ATmega168 Тактовая частота ATmega168 8 МГц (3.3 В) с возможность автоматической перезагрузки.
  • Arduino NG или предыдущие версии с ATmega168 Тактовая частота ATmega168 16 МГц без возможности автоматической перезагрузки. Компиляция и загрузка соответствует Arduino Diecimila или Duemilanove с ATmega168, но загрузка Bootloader имеет длинный таймаут (при перезагрузке светодиод пина 13 мигает три раза).
  • Arduino NG или предыдущие версии с ATmega8 Тактовая частота ATmega8 16 МГц без возможности автоматической перезагрузки.
Рейтинг
( 2 оценки, среднее 4.5 из 5 )
Понравилась статья? Поделиться с друзьями:
Для любых предложений по сайту: [email protected]