Скетч в программировании что это
Scratch для «продвинутых»
Клонирование и переменные в Scratch
Моему ученику нравилась игра — «Зомби против растений». И ему было интересно самому запрограммировать её. Давайте вспомним как данная игра работает? С правой стороны у нас есть шеренга растений, которая расстреливает приближающихся зомби.
Есть множество решений данной задачи, но на мой взгляд более элегантное решение — задействовать минимально возможное количество спрайтов, т.е. использовать клонирование.
Как сделать так, чтобы у каждого отдельного клона был собственный уровень жизни? Что выбрать переменные или списки? Сделали попытку использовать списки, но после более детальной проработки поняли, что данная структура данных не помогает решить проблему. У переменных и списков, в Scratch есть 2 типа видимости для каждого типа данных — это «для всех спрайтов» или «только для этого спрайта». Пришлось проверять область видимости. Начали мы с переменных.
Дойдя до рабочего варианта переменной с областью видимостью «только для этого спрайта». В классических языках программирования такой тип видимости называют — локальным или приватным в зависимости от контекста.
Оказывается, что если эта переменная с данной областью видимости используется в клоне, то в клоне создается экземпляр переменной, принадлежащий конкретному клону и который используется для внутренних вычислений/работы клона. В нашем случае, у каждого клона есть своя «жизнь». Если стало интересно, то советую обратиться к справочнику. А вот картинка, которая показывает, как спрайты или клоны работают с переменными разных типов видимости.
Переменная с областью видимости «для всех спрайтов» (рисунок слева) — одна на всех. Кстати, здесь вы можете с детьми посмотреть работу с критическими секциями и что такое гонка за ресурс. А если область видимости переменной — «только для этого спрайта», то у спрайта и у его клонов появляется собственная переменная с тем же именем, с которой они работают (рисунок с права). И клоны не имеют доступа к переменной оригинала и переменной другого клона.
Это стало неожиданным и приятным открытием свойств Scratch для создания подобных алгоритмов.
ВАЖНО: Переменная — это очень мощный инструмент настоящего программиста, поэтому я сразу учу детей правильному именованию переменных, так как этот навык поможет им в проектах разной сложности.
Имена объектов как их идентификаторы
ВАЖНО: все переменные с зоной видимостью «только для этого спрайта».
Данный инструмент для меня стал совсем неожиданным. Давайте начнем с истории о том, как мы с учеником наткнулись на данную особенность языка. Мой ученик решил, создать игру с «искусственным интеллектом». Игра представляет звездные войны на космических кораблях и у игрока есть возможность управлять одним кораблем, в то время как противники гоняются за вами и за друг другом. Чтобы они могли преследовать вас или друг друга, им нужно как-то принимать решение о том, кого преследовать. Данную задачу можно решить в лоб и задать очередность преследования кораблей, но игра потеряет свою интеллектуальность и быстро наскучит. Поэтому ученик решил настроить интеллект таким образом, чтобы корабли с интеллектом преследовали ближайшего противника. Давайте посмотрим, как он начал решать данную задачу.
На мой взгляд хорошее решение для создания быстрого прототипа. Но какие ограничения здесь есть? Первое, усложнение кода по мере добавления новых кораблей. Следовательно, сложность кода повышается и не исключены мутации кода из-за усложнения. Время поиска ошибки и отладки алгоритма будет расти. И конечно, никто не отменял такую прикольную метрику, как старение кода (advance level SW Development). Что же делать? А делать необходимо следующее, нужно сделать обобщеный алгоритм, который будет динамично приспосабливаться к увеличению или уменьшению количества кораблей.
Для данного алгоритма нам и понадобиться свойство языка — имя как идентификатор объекта. Пришло время больших изменений и здесь вы, как учитель, можете рассказать про такое явление как рефакторинг. Это последовательное изменение кода, улучшение его структуры и его оптимизация. А главное, чтобы каждое изменение не ломало работу программы, и объем изменений тоже должен очень аккуратно подобран. Слишком много изменений — плохо, слишком мало — долго. Сформированный навык рефакторинга даст преимущество и эффективность работы программиста. Но для формирования навыка нужно работать головой, а не просто тыкаться. У меня получилось сделать 4 изменения в первоначальной программе и результат не изменился.
Заметьте, что я еще не удалил блоки, а оставил их. Зачем? Потому, что если что-то пойдет не так, мы можем вернуть предыдущий вариант, начав все заново. Но как только я проверю правильность выполнения обновленного скрипта, я сразу же их удалю, чтобы не отвлекаться на них в последующем.
Заметили? Сейчас в блоке «повернуться к …» стоит переменная и эта штука работает. Т.е. мы минимальными усилиями проверили, что данный подход работает. Это просто круто. Теперь мы можем начать писать алгоритмы, которые позволят определять объект преследования ближайшего корабля.
Что нам пригодится? Это из структур данных — это переменные и списки. Из алгоритмов — это нахождение минимального числа (расстояния) в списке. Еще нам необходим алгоритм, который определит имя объекта для преследования по минимальному расстоянию.
Сейчас будет написано много кода. Но для того, чтобы потом не захлебнуться и не запутаться в куче скриптов, нам необходимо использовать еще одну классную функцию, а именно создание собственных блоков. Эта функция очень мощная, но ее редко используют школьники, да и некоторые программисты, а ведь она позволяет создать понятный с первого прочтения алгоритм программы. Кстати, можете почитать про приемы создания понятного кода в книге Мартина Фаулера «Рефакторинг. Улучшение существующего кода»
Как и перед любым масштабным строительством нам необходимо все спланировать. Давайте спланируем в каком порядке будем разрабатывать блоки:
Для того, чтобы создать обобщенный алгоритм нам чем-то нужно пожертвовать, например, оригинальными именами спрайтов, придется их стандартизировать и получим следующий расклад.
И теперь мы готовы описать 1 часть программы. Все пишем для 1-ого корабля. Запускаем отдельно данный скрипт и смотрим результат. Поехали!
Если мы добавим новый корабль, нам нужно изменить в данном алгоритме лишь одну циферку. Клево? Клево!
Погнали дальше. А давайте научим его 2 алгоритму. Смотрим, что получилось. Это сразу конечный результат со вспомогательными функциями.
Ура! Работает. Проверить это можно следующим образом, должен быть обязательно 0 одним из значений в списке расстояний. Если у вас это не так, ищите ошибку.
Едем дальше! Поиск минимального расстояния. Заметили, что расстояние всегда положительно. И всегда будет минимальное число — 0. Ай-я-яй! Вывод — искать минимум, но не ноль. Можете попробовать свои силы и оптимизировать код самостоятельно, чтобы не делать расчет расстояния от корабля 1 до корабля 1 (это не опечатка).
Обучаем спрайт новой функции и получаем.
Не забываем проверять! Для этого можно даже остановить игру и запустить отдельный скрипт.
Мы написали все, что необходимо, теперь главное правильно использовать данные функции.
Если у вас все работает правильно, то вы должны увидеть следующее:
Заметили, что корабль с «искусственным интеллектом» разрывается между разными противниками. Вы можете усовершенствовать программу и усложнить принятие решения. Например, если у преследуемого корабля осталось мало жизни, то он добивает его, а если он нашел, ближе и с еще меньшим здоровьем, то добить сначала слабейшего.
Кстати, в данной программе можно уменьшить количество действий и усовершенствовать алгоритмы. Попробуйте свои силы. Взять данную программу можно здесь.
Подводим итоги
Вот на таких кейсах я узнал, как Scratch дает возможность ученикам быстрее освоить множество реальных техник программирования. На нем можно рассказывать про работу критических секций, про обобщенные алгоритмы, про переменные и их области видимости, про создание собственных блоков и структурирование кода. А также на данном языке можно рассказывать про профессиональные навыки, например, рефакторинг.
Это лишь малая часть инструментария программиста, но она являет очень важной. А в Scratch это объяснить становится чуточку легче.
Скетчи для Arduino
Скетчи для Arduino – важный элемент программирования, без которого невозможно функционирование и запуск цифровых процессов в среде разработки Arduino IDE. Новичкам и начинающим пользователям приложения бывает сложно разобраться с прошивкой, хотя создатели ПО вложили в нее много готовых примеров и подсказок.
Давайте поговорим об основных нюансах, которые связаны с библиотеками и прошивкой – и вы поймете, насколько это интересно и увлекательно. Последний этап можно разделить на 2 основные шага:
Первый вариант является наиболее простым и самым распространенным. Ничего искать и скачивать из сети не нужно. Просто открываем среду Arduino IDE, заходим в меню, выбираем Файл, затем пункт Примеры, иподпункт Basics. Кликаем на один из самых простых примеров:
Запускаем его и работаем.
Обратите внимание на Панель управления софта (мы незаслуженно обходили ее стороной, исправляемся). Она имеет несколько клавиш.
Напомним их предназначение:
Выбранный ранее скетч загружается в особую область памяти микроконтроллера. При дальнейшем постоянном использовании запускается в автоматическом режиме уже без вашего вмешательства и правок.
Ну и поговорим немного о сторонних скетчах, которые вы наверняка заметили в каждом нашем материале и схеме подключения на конкретных проектах. Если описывать наглядно, как выглядит методология их применения, то получится так. Сначала вы копируете скетч, вставляете его в соответствующее окно в утилите, кликаете на кнопку Компиляция, дожидаетесь ее окончания. Просто, не так ли?
Ну и напоследок отметим, скачать скетчи для Arduino можно на нашем веб-сайте в данном разделе. Выбирайте тот файл, что вам нужен и дерзайте!
«Пишем свой первый скетч» Урок № 1
Урок № 1
Это продолжение цикла уроков про Ардуино для начинающих.
В этом уроке, видео на который можно посмотреть на канале YOUTUBE
рассказано как подключить светодиод, рассчитать значение токоограничивающего резистора, про закон Ома, и многое другое.
Что такое функция void setup() и void loop(), вообщем посмотрите, не пожалеете.
Для этого урока, для основной его части потребуются.
Ардуино Нано v 3.0
Макетная плата (беспаечная) Breadboard
Провода 5 шт.
Резисторы 220 Ом 3 шт.
Светодиоды 3 шт.
Плату Ардуино и макетную плату вы покупаете всего 1 раз, а использовать будете на протяжении всех уроков.
Для дополнительного занятия потребуется ещё
Этот урок надо использовать вместе с видео.
Скетчи основной части урока.
Мигание 1 светодиодом. Скачать.
Мигание 3 светодиодами. Скачать.
Теперь, как и обещал некоторые интересности.
Вот наш код из первого скетча
void setup() <
pinMode(LED, OUTPUT); // УСТАНАВЛИВАЕМ ЦИФРОВОЙ ПИН 13 НА ВЫХОД
>
void loop() <
digitalWrite(LED, HIGH); // ЗАЖИГАЕМ СВЕТОДИОД
delay(1000); // ЖДЁМ 1 СЕКУНДУ
digitalWrite(LED, LOW); // ГАСИМ СВЕТОДИОД
delay(1000); // ЖДЁМ 1 СЕКУНДУ
>
с Логическими операторами мы познакомимся в следующих уроках
&& (логическое И) Истина, если оба операнда истина.
|| (логическое ИЛИ) Истина, если хотя бы один операнд истина.
! (логическое отрицание) Истина, если операнд Ложь, и наоборот.
Замена delay()
Эта функция служит для остановки микроконтроллера.
Как я и говорил в видео, функцию delay() надо применять очень осторожно.
Означает остановить выполнение всех программ (ну почти всех) и ждать пока не пройдёт время, указанное в скобках. Оно указывается в миллисекундах (1000 миллисекунд = 1 секунде) и пока это время не закончится ARDUINO будет бездействовать.
Есть ещё прерывания, но это мы будем изучать в следующих уроках.
Правильнее будет использовать функцию millis();
Она возвращает количество миллисекунд с момента начала выполнения программы.
Количество миллисекунд в millis() ограничено 50 днями. При наступлении этого времени счётчик сбросится 0.
void setup() <
pinMode(LED, OUTPUT); // УСТАНАВЛИВАЕМ ЦИФРОВОЙ ПИН 13 НА ВЫХОД
>
Теперь переходим к самому интересному.
Дополнительной части урока.
Напишу её сегодня-завтра. Хочу, чтобы на выходные вам было чем заняться.
Удачи вам в освоении этого непростого, но интересного дела.
Изучив эти уроки, вы освоите новую, интересную профессию – Программист. Освоив её, вы можете быть спокойны за свою будущее, ведь по статистике, программист самый востребованный и высокооплачиваемый специалист в наше время.
Смотрите новые уроки. Подписывайтесь на канал. И удачи.
Как написать скетч?
Послесловие к базовым урокам
Вот и закончился базовый курс уроков программирования Arduino. Мы с вами изучили самые базовые понятия, вспомнили (или изучили) часть школьной программы по информатике, изучили большую часть синтаксиса и инструментов языка C++, и вроде бы весь набор Ардуино-функций, который предлагает нам платформа. Подчеркну – мы изучили C++ и функции Ардуино, потому что никакого “языка Arduino” нет, это ложное понятие. Arduino программируется на C или ассемблере, а платформа предоставляет нам всего лишь несколько десятков удобных функций для работы с микроконтроллером, именно функций, а не язык. Теперь перед нами чистый лист блокнота Arduino IDE и желание творить и программировать, давайте попробуем!
Структура программы
Прежде, чем переходить к реальным задачам, нужно поговорить о некоторых фундаментальных вещах. Микроконтроллер, как мы обсуждали в самом начале пути, это комплексное устройство, состоящее из вычислительного ядра, постоянной и оперативной памяти и различных периферийных устройств (таймеры/счётчики, АЦП и проч.). Обработкой нашего с вами кода занимается именно ядро микроконтроллера, оно раздаёт команды остальным “железкам”, которые в дальнейшем могут работать самостоятельно. Ядро выполняет различные команды, подгоняемое тактовым генератором: на большинстве плат Arduino стоит генератор с частотой 16 МГц. Каждый толчок тактового генератора заставляет вычислительное ядро выполнить следующую команду, таким образом Ардуино выполняет 16 миллионов операций в секунду. Много ли это? Для большинства задач более чем достаточно, главное использовать эту скорость с умом. Зачем я об этом рассказываю: микроконтроллер может выполнить только одну задачу в один момент времени, так как у него только одно вычислительное ядро, поэтому реальной “многозадачности” нет и быть не может, но за счёт большой скорости выполнения ядро может выполнять задачи по очереди, и для человека это будет казаться многозадачностью, ведь что для нас “раз Миссисипи“, для микроконтроллера – 16 миллионов действий! Есть всего два варианта организации кода:
“Многозадачность” с yield()
Таким же образом можно опрашивать энкодер или другие датчики, которые требуют максимально частого опроса. Не менее жизненным будет пример со сценарием движения шагового мотора или плавного движения сервопривода, которые требуют максимально частого вызова функций опроса. Рассмотрим абстрактный пример движения мотора по нескольким заданным точкам, функция вращения мотора должна вызываться как можно чаще (так сделано почти во всех библиотеках для шаговых моторов):
Таким образом мы быстро и просто расписали “траекторию” движения для шагового мотора по времени, не используя какие-то таймеры или библиотеки таймеров. Для более сложных программ, например с движением двух моторов, такой фокус уже может не пройти и проще работать с таймером.
“Многозадачность” с millis()
Первым делом внесём такую оптимизацию: сократим код вдвое и избавимся от одной задержки, используя флаг:
Хитрый ход, запомните его! Такой алгоритм позволяет переключать состояние при каждом вызове. Сейчас наш код всё ещё заторможен задержкой в 1 секунду, давайте от неё избавимся:
Что здесь происходит: цикл loop() выполняется несколько сотен тысяч раз в секунду, как ему и положено, потому что мы убрали задержку. Каждую свою итерацию мы проверяем, не настало ли время переключить светодиод, не прошла ли секунда? При помощи этой конструкции и создаётся нужная многозадачность, которой хватит для 99% всех мыслимых проектов, ведь таких “таймеров” можно создать очень много!
Данный код всё ещё мигает светодиодом раз в секунду, но помимо этого он с разными промежутками времени отправляет сообщения в последовательный порт. Если открыть его, можно увидеть следующий текст:
Это означает, что у нас спокойно работают 4 таймера с разным периодом срабатывания, работают “параллельно”, обеспечивая нам многозадачность: мы можем выводить данные на дисплей раз в секунду, и заодно опрашивать датчик 10 раз в секунду и усреднять его показания. Хороший пример для первого проекта! Обязательно вернитесь к уроку о функциях времени, там мы разобрали несколько конструкций на таймере аптайма!
“Многозадачность” с прерываниями таймера
Для критичных по времени задач можно использовать выполнение по прерыванию таймера. Какие это могут быть задачи:
Настройка таймера на нужную частоту и режим работы – непосильная для новичка задача, хоть и решается в 2-3 строчки кода, поэтому предлагаю использовать библиотеки. Для настройки прерываний по таймеру 1 и 2 есть библиотеки TimerOne и TimerTwo. Мы сделали свою библиотеку, GyverTimers, в которой есть также таймер 0 (для программирования без использования Arduino.h), а также все таймеры на Arduino MEGA, а их там целых 6 штук. Ознакомиться с документацией и примерами можно на странице библиотеки. Сейчас рассмотрим простой пример, в котором “параллельно” выполняющемуся Blink будут отправляться данные в порт. Пример оторван от реальности, так делать нельзя, но он важен для понимания самой сути: код в прерывании выполнится в любом случае, ему безразличны задержки и мёртвые циклы в основном коде.
Переключение задач
Важнейшим инструментом по организации логики работы программы является так называемый конечный автомат (англ. State Machine) – значение, которое имеет заранее известный набор состояний. Звучит сложно, но на самом деле речь идёт об операторе swith и переменной, которая переключается кнопкой или по таймеру. Например:
Таким образом организуется выбор и выполнение выбранных участков кода. Переключение переменной mode тоже должно быть сделано не просто так, как в примере выше, тут есть варианты:
Ограничить диапазон при увеличении можно несколькими способами. Способы абсолютно одинаковые по своей сути, но записать можно по разному:
Аналогично при уменьшении:
Переключение с первой на последнюю и обратно делается точно так же:
Рассмотрим несколько готовых примеров на базе библиотеки GyverButton:
Флаги
Логические переменные, или флаги, являются очень важным инструментом организации логики работы программы. В глобальном флаге можно хранить “состояние” составляющих программы, и они будут известны во всей программе, и во всей же программе могут быть изменены. Немного утрированный пример:
Состояние глобального флага может быть прочитано в любых других функциях и местах программы, таким образом можно сильно упростить код и избавиться от лишних вызовов. При помощи флага можно организовать однократное выполнение блока кода по какому-то событию:
Также флаг можно инвертировать, что позволяет генерировать последовательность 10101010 для переключения каких-то двух состояний:
Флаги – очень мощный инструмент, не забывайте о них!
Избавляемся от циклов и задержек
Как мигать светодиодом без задержки мы обсуждали выше. А как избавиться от цикла? Очень просто – цикл заменяется на счётчик и условие. Пусть у нас есть цикл for, выводящий значение счётчика:
Для избавления от цикла нам нужно сделать свою переменную-счётчик, поместить всё это дело в другой цикл (например, в loop) и самостоятельно увеличивать переменную и проверять условие:
И всё. А как быть, если в цикле была задержка? Вот пример
Как соединить несколько скетчей?
Чтобы соединить несколько проектов в один, нужно разобраться со всеми возможными конфликтами:
Можно внести все правки в схемы и программы объединяемых проектов, чтобы они не конфликтовали. Далее приступаем к сборке общей программы:
Раньше у нас было два (или больше) отдельно работающих проекта. Теперь наша задача как программиста – продумать и запрограммировать работу этих нескольких проектов в одном, и тут ситуаций уже бесконечное множество:
В большинстве случаев нельзя просто так взять и объединить содержимое loop() из разных программ, я надеюсь все это понимают. Даже мигалку и пищалку таким образом объединить не получится, если изначально код был написан с задержками или замкнутыми циклами.
Пример “Метеостанция”
Сила Arduino как конструктора заключается в том, что абсолютно по любой железке вы сможете найти в Гугле подробное описание, библиотеку, схему подключения и пример работы: полностью готовый набор для интеграции в свой проект! Вернёмся к нашим метео-часам и попробуем “собрать” такой проект из скетчей-примеров, ведь именно для этого примеры и нужны! Нам понадобится:
Начинаем гуглить информацию по подключению и примеру для каждой железки:
Из уроков из Гугла мы узнаём такую важную информацию, как схемы подключения: дисплей и часы подключаются к шине i2c, а датчик ds18b20 можно подключить в любой другой пин. Схема нашего проекта: Качаем библиотеки для наших модулей и устанавливаем. Библиотеку дисплея нам дают прямо в статье: https://iarduino.ru/file/134.html, библиотеку для часов по своему опыту советую RTClib (та, что в статье – не очень удобная). В статье про датчик температуры нам рассказали про библиотеку DallasTemperature.h, ссылку – не дали. Ну чтож, поищем сами “DallasTemperature.h”, найдём по первой ссылке. Для неё нужна ещё библиотека OneWire, ссылку на неё дали в статье про термометр. Итого у нас должны быть установлены 4 библиотеки. Сейчас наша цель – найти рабочие примеры для каждой железки, убедиться в их работоспособности и выделить для себя минимальный набор кода для управления модулем, это бывает непросто – в статьях бывают ошибки и просто нерабочий код: эти статьи чаще всего являются копипастой от людей, далёких от темы. Я взял пример работы с дисплеем из статьи, а вот часы и термометр пришлось смотреть в примерах библиотеки. Немного причешем примеры, оставим только нужные нам функции получения значений или вывода, я оставил всё что мне нужно в setup() :
Супер-быстрый старт с Ардуино: берёшь и делаешь
Когда я начала заниматься Ардуино, мне казалось, что весь мир только и делает, что занимается тем же. На самом деле оказалось, что, как и мне, многим просто трудно начать, «въехать» в саму тему. Поэтому я решила написать быстрый гайд для того, чтобы вы сразу могли взять несколько компонентов и попробовать эту игрушку. Вероятно, после прочтения, вы даже сразу во многом поймёте что к чему и без моих будущих постов. Итак.
Если вы не попробовали Ардуино только потому, что не можете начать, не зная что к чему, я сейчас спасу вас.
Ардуино — это просто, как конструктор Lego. Но когда его начинают объяснять, то всплывает куча баззвордов: среда разработки, железо, камень, прошивка, библиотека, драйвер, скетч, исполняемый файл, компоненты, навыки программирования, программно-аппаратная часть, ардуино-совместимая платформа… Да тут кто хочешь с ума сойдёт, надо же так усложнять простой набор игрушек для детей! =)
На самом деле всё просто: у нас есть сама Ардуино — это мозг наших будущих игрушек, которые мы с ней соберём.
У нас есть две готовых шилды на выбор. Почему? Мы сейчас «воткнем» Ардуину в одну шилду, посмотрим, как она работает, а затем перепрограммируем и воткнём в другую — и снова убедимся, что работает. Так нам сразу станет понятно, и мы сможем двигаться дальше — благо направлений развития вместе с Ардуиной — много.
Первая шилда — супер-интересная. Из неё мы сделаем радио, о котором я ещё много расскажу, но не сейчас. Набор хорош тем, что в нём множество компонентов и можно по-разному надстраивать конечную функциональность устройства. Но это всё потом. Ардуино в этом наборе уже есть, поэтому её не надо покупать отдельно. Вторая шилда — супер-красивая. Ею мы уютно и замысловато осветим наш мир. Про неё я тоже много чего планирую рассказать, но позже. Вы можете выбрать любые другие шилды, но мне понравились именно эти, потому что — забегая вперёд — у них большое будущее 😉
План действий сейчас такой: подключаем и перепрограммируем нашу Ардуину, чтобы посмотреть, как это работает и убедиться, что это просто. Разбираться что к чему будем потом.
Шаг 1: Cоберите первую шилду
Берём этот набор. Собираем радио по инструкции. Это просто, как собрать игрушку из киндер-сюрприза. Только гораздо более увлекательно!
Что мы только что сделали? Мы «навтыкали» компонентов в готовую шилду, «воткнули» в неё же Ардуину с загруженным заранее скетчем для работы всех этих компонентов. Всё, у нас готовое устройство. И оно работает! =)
Шаг 2: установите IDE
Всё, с первой шилдой мы увидели, как это всё собирается и работает. Теперь — самое главное: ОТКЛЮЧАЕМ ПИТАНИЕ. Достаём Ардуино и берём следующую шилду.
Наша новая шилда, если верить надписям на ней, называется MP 1051. У Ардуино глаз нет, поэтому она не знает эту шилду и не может с ней работать пока что. Сейчас мы это исправим.
Для того, чтобы Ардуина знала, где на этой шилде что, и что там вообще есть, нам нужна эта библиотека. А для того, чтобы она начала этим всем манипулировать, нам нужен какой-нибудь из этих скетчей — начнём с первого: для него не нужен пульт.
Хозяйке на заметку:
Если Ардуино — это голова, мозг, то:
Загрузить в Arduino библиотеку и скетч можно при помощи программы IDE. Если сам конструктор Ардуино похож на лего, то программа IDE похожа на iTunes: для того, чтобы загрузить музыку в телефон, вам нужна специальная программа? Миллионы людей справляются с этой задачей, справимся и мы с IDE.
2. Установите IDE как обычную программу.
Узнать больше: для Windows
3. Подключите Ардуину по USB
4. Запустите IDE (с правами супер-пользователя, если вам это о чем-либо говорит. Если нет, то забейте на эти права. Если да — скачайте версию 1.0.1 — всё, что старше, на Linux работает криво).
5. Выберите тип Ардуины. (Выберется, скорее всего, автоматически. Но у нас в руках из набора Arduino Nano 3.0 и на квадратном процессоре сверху написано Amtel Mega 328p — это значит, из меню выбираем Nano ATmega328).
6. Проверьте, компьютер видит Ардуину: виден её порт, через который мы её подключили.
Всё готово? Сейчас разберёмся с тем, что загрузить и как, и через 5 минут лампочки (диоды!) на нашей новой шилде будут весело освещать наш дом.
Если порт не найден, отсоедините всё и закройте программу. Присоедините Ардуино заново, можно к новому порту, откройте программу. Это похоже на мобильное приложение у вас в телефоне: если оно зависло, вы его перезапускаете, и оно снова работает. Здесь тот же принцип troubleshooting. =)
Шаг 3: Используйте скетч и библиотеку по назначению
Здесь-то и начинается самый magic! =) Но, почему-то, именно к этому волнующему моменту объяснения были самые скучные:
В моём случае это была папка Downloads — куда я скачала программу, там она у меня лежит, оттуда и запускается — ничего сложного.
Всё! Давайте скорее объединим Библиотеку + Скетч, скомпилируем их в машинный код и загрузим на контроллер. Это быстро.
Произойдёт: Компилирование — Компилирование выполнено
Произойдёт: Загрузка — Загрузка выполнена
Как видите, мы ни разу даже не открыли ни один скетч, а если и открыли, то ненадолго. В этом прелесть библиотек и скетчей, которые уже написаны под определённые шилды и компоненты для Ардуино.
Назад в будущее
Если вы теперь вернёте Ардуино на место, на шилду радио (Важно! Обесточьте плату перед пересадкой на шилду!), то радио больше «не будет работать». Хотите вернуть всё как было? Вы уже знаете, как это сделать!
Обратите внимание на нужные нам папки — libraries и examples. А также на то, что название папок и файлов должно писаться латиницей в одно слово. Можно использовать цифры и нижнее подчёркивание. Итак, возвращаем всё как было:
Откройте все нужные библиотеки (см. изобр.) + копируйте сюда скетч. Компилируйте. Загружайте. Готово! Можно поставить Ардуино обратно в шилду радио и снова его (радио) включить.
Вот так быстро мы с вами разобрались с:
1. Как перепрограммировать Ардуино под разные шилды при помощи готовых скетчей и библиотек.
2. Зачем нам скетч, зачем нам библиотека. Что куда класть.
3. Как работать с программой Arduino IDE, чтобы загрузить скетч вместе с библиотекой.
Как видите, всё просто. У меня ушло несколько дней на то, чтобы «въехать» самостоятельно. Надеюсь, кому-то я сэкономлю эти несколько дней. Удачи вам с Ардуино DIY и до новых встреч: я планирую ещё много с чем разобраться на базе имеющихся у меня модулей и компонентов и обязательно поделюсь с вами идеями и навыками.
Традиционно, в конце статьи — спасибо!
Большое спасибо пользователю Алексею Коротичу за присланные специально для подготовки этой статьи полезные ссылки: