Руководства · 13 мин чтения

Разбор кода Arduino шаг за шагом: сначала пойми, потом измени

Разбор готового кода Arduino шаг за шагом в BlueGrays: краткое описание, шаги, «Если не получается», задания «Твоя очередь», план занятия на 15 минут и реальный проект с кнопкой.

Разбор кода — это вкладка в разделе «Исходный код» на странице каждого проекта BlueGrays, которая шаг за шагом объясняет готовый код Arduino. Чтобы понять, что на самом деле делает скопированный и загруженный код, иди в таком порядке: сначала прочитай краткое описание Что делает этот код?, затем найди в полном коде каждый фрагмент из раздела Шаг за шагом вместе с его объяснением, а если схема ведёт себя не так, как ожидалось, загляни в Если не получается; в конце выполни задание Твоя очередь: измени в коде что-то одно и посмотри на результат на плате. Эти четыре раздела — самый короткий путь от «работает, но непонятно почему» к «знаю, что будет, если изменить эту строку».

В этой статье мы проходим вкладку «Разбор кода» от начала до конца на реальном содержимом реального проекта: проект номер 10, Включение и выключение светодиода кнопкой (вкл/выкл). Он бесплатный, уровень «Новичок», и у него есть блочный вид, так что объяснение и кода, и блоков может открыть любой. Здесь ты найдёшь разделы вкладки, способ сопоставлять код с объяснением, план занятия на 15 минут, стратегию решения заданий «Твоя очередь», какое изменение какому понятию учит, вид «Разбор блоков», разницу между «Если не получается» и «Если не работает» и идеи для преподавателей, которые используют вкладку на уроках.

Эта статья продолжает серию, в которой мы проходим BlueGrays раздел за разделом. В предыдущей части мы разобрали страницу проекта целиком на примере ночника на LDR и кратко представили «Разбор кода»; здесь сосредоточимся только на этой вкладке и на практике изменения кода.

Где находится вкладка «Разбор кода» и кому она доступна?

Открой проект и пролистай до раздела Исходный код: вверху будет переключатель с двумя вкладками — Код и Разбор кода. Вкладка «Код» показывает программу целиком, и именно там находятся кнопки «Копировать» и «Копировать ссылку». Переключись на «Разбор кода», и откроется та же программа с пояснениями. Эта вкладка есть у каждого из 200+ проектов и устроена одинаково в проектах на Arduino, ESP32 и Raspberry Pi Pico. С доступом всё просто: в 60 бесплатных проектах (по 20 на каждую платформу) «Разбор кода» открыт для всех, так что даже с бесплатным аккаунтом видны краткое описание, все шаги, «Если не получается» и задание «Твоя очередь» вместе с решением. В проектах Premium на месте вкладки стоит карточка с замком: «Пошаговый разбор кода открывается с Premium.» Значит, способ из этой статьи можно применять к проектам «Мигающий светодиод», «Светофор», «Полицейская мигалка на светодиодах» и к проектам с кнопкой, ничего не платя.

Разделы: для чего нужен каждый

РазделЧто показываетКак пользоваться
Что делает этот код?Краткое описание в 2–3 предложениях: что делает программа, в каком порядке и почему всё время повторяетсяПрочитав его, объясни программу одним предложением, не глядя на экран; если не выходит, прочитай ещё раз
Шаг за шагомПронумерованные шаги, у каждого есть заголовок, короткий фрагмент кода и объяснение (в большинстве проектов 5–6 шагов)Читай шаги по порядку и находи фрагмент каждого шага в полном коде
Фрагмент кодаТолько те строки, о которых говорит шаг, без остальной программыСмотри на числа и номера пинов в нём: обычно именно их и можно менять
Если не получаетсяЧастые симптомы в этом проекте и способы их устранить (обычно 4–5)Если схема ведёт себя не так, как ожидалось, сначала ищи свой симптом здесь
Твоя очередьКороткое задание, в котором нужно изменить в коде что-то одноСначала предскажи результат, потом внеси изменение и загрузи код
ПодсказкаОдно предложение прямо под заданием, которое говорит, куда смотретьПрочитай, если предсказание не сбывается: она указывает направление, но не даёт ответа
Показать решениеБлок РЕШЕНИЕ, который открывается по нажатию: какая строка во что превращается и какой будет результатОткрывай его последним и сравнивай со своим вариантом; закрыть его снова можно кнопкой «Скрыть решение»

Порядок разделов выбран намеренно: сначала общая картина, потом детали, потом ошибки и в конце твой собственный эксперимент. Фрагменты кода — это не вся программа, а только строки, которые объясняет данный шаг; закрывающая фигурная скобка блока, открытого на одном шаге, может оказаться в следующем. Поэтому прочитать все шаги по порядку полезнее, чем мельком взглянуть на один. Подсказка видна сразу под текстом задания, а решение скрыто, пока не нажмёшь Показать решение. Такая раскладка оставляет время подумать, прежде чем увидеть ответ.

Пример: «Разбор кода» в проекте «Включение и выключение светодиода кнопкой (вкл/выкл)»

В проекте одна кнопка и один светодиод. Один вывод кнопки подключён к 5V, а противоположный — к пину 13 платы; этот же пин притянут к GND через резистор 10 kΩ. Длинная ножка светодиода идёт к пину 7, а короткая — к GND через резистор 330 Ω. Краткое описание в «Разборе кода» объясняет программу так: при каждом нажатии кнопки светодиод один раз меняет состояние — выключенный загорается, а горящий гаснет; даже если держать кнопку нажатой, светодиод меняется только один раз, а пауза 50 мс отсекает дребезг кнопки. Ниже вся программа целиком, с комментариями на двух языках.

C++ (Arduino IDE)
1int ledState = 0;     // LED durumu: 0 sönük, 1 yanık / LED state: 0 = off, 1 = on
2int lastButton = 0;   // Butonun önceki okuması / Previous button reading
3
4void setup() {
5  pinMode(13, INPUT);   // Buton girişi, harici pull-down / Button input, external pull-down
6  pinMode(7, OUTPUT);   // LED çıkışı / LED output
7}
8
9void loop() {
10  int button = digitalRead(13);   // Butonu oku / Read the button
11  if (button != lastButton) {     // Buton durumu değişti / Button state changed
12    if (button == 1) {            // Yalnız basış anında (LOW -> HIGH) / Only at the press (LOW -> HIGH)
13      ledState = !ledState;       // Durumu tersine çevir / Flip the state
14      digitalWrite(7, ledState);  // Yeni durumu LED'e yaz / Write the new state to the LED
15    }
16    delay(50);                    // Sıçramayı atlamak için kısa bekleme / Short wait to skip the bounce
17    lastButton = button;          // Bu okumayı sakla / Store this reading
18  }
19}
ШагФрагмент кодаСуть объясненияКакому понятию учит
1. Переменные, которые помнят светодиод и кнопкуint ledState = 0; int lastButton = 0;ledState хранит текущее состояние светодиода, а lastButton — предыдущее показание кнопки; они объявлены вне функций, поэтому сохраняют значения на каждом проходе loopГлобальная переменная
2. setup(): готовим пиныpinMode(13, INPUT); pinMode(7, OUTPUT);D13 — вход, D7 — выход; INPUT достаточно, потому что в схеме есть внешний стягивающий резистор (pull-down) 10 kΩ, иначе пин «висел» бы в воздухеВход, выход, стягивающий резистор (pull-down)
3. loop(): читаем кнопку, ловим изменениеint button = digitalRead(13); if (button != lastButton) { if (button == 1) { (сравнение с прошлым показанием)Если показание совпадает с предыдущим, ничего не происходит; если оно изменилось и теперь равно 1, значит, кнопку нажимают именно в этот моментОбнаружение фронта (переход от LOW к HIGH)
4. Переворачиваем состояние, пишем его в светодиодledState = !ledState; digitalWrite(7, ledState);Оператор ! превращает 0 в 1, а 1 в 0; новое значение записывается в светодиодПереключатель (toggle, вкл/выкл)
5. Пауза 50 мс и сохранение последнего показанияdelay(50); lastButton = button;Механическая кнопка несколько миллисекунд дребезжит; пауза 50 мс отсекает это, затем показание сохраняется для следующего проходаАнтидребезг (debounce)

При чтении шагов обрати внимание: объяснение говорит не только о том, что происходит, но и о том, что было бы без этой строки. Шаг 1 напоминает, что ledState начинается с 0, поэтому при включении платы светодиод выключен. Отсюда хороший вопрос: если поставить 1, загорится ли светодиод при старте? Нет, потому что эта строка меняет только переменную; setup() ничего не записывает в светодиод, так что он стартует выключенным, а при первом нажатии ledState возвращается к 0, и светодиод остаётся выключенным. Значение переменной и реальное состояние пина — две разные вещи. Шаг 2 связывает использование INPUT для кнопки с резистором 10 kΩ в схеме: пока кнопка не нажата, резистор притягивает пин к GND, и читается 0. Убери резистор — и пин «повиснет» в воздухе и будет читать случайные значения; симптом «светодиод сам включается и выключается» в «Если не получается» соответствует именно этому.

Шаги 3 и 5 нужно читать вместе. Сравнение в шаге 3 работает, только если lastButton обновляется после каждого изменения, а это обновление — строка lastButton = button в шаге 5. Когда эти два шага сопоставлены, становится ясна главная идея программы: код проверяет не то, нажата ли кнопка, а то, изменилось ли её состояние. Пока кнопку держат, на каждом проходе читается 1, но в lastButton тоже 1, поэтому сравнение ложно и светодиод не меняется. Оператор ! в шаге 4 — это выключатель вкл/выкл из двух строк. Шаг 5 заканчивается предупреждением: если пауза слишком короткая, светодиод иногда может переключиться больше одного раза за нажатие. Отсюда твой первый эксперимент ещё до задания: уменьши 50 до 5, нажми несколько раз и посмотри, не переключается ли светодиод время от времени дважды; результат зависит от качества кнопки. Подробнее об антидребезге — в статье как подключить кнопку к Arduino.

Блоки проекта «Включение и выключение светодиода кнопкой (вкл/выкл)» на английском: глобальные переменные, настройка с пином 13 как входом и пином 7 как выходом и два вложенных блока «если» внутри «повторять всегда»
Та же программа в виде блоков. В режиме «Разбор блоков» эта картинка делится на шаги, и на каждом шаге видны только его собственные блоки.

В разделе «Если не получается» этого проекта пять симптомов: светодиод никогда не загорается; светодиод меняется сам, без нажатия кнопки; при нажатии кнопки ничего не происходит; кнопка ведёт себя так, будто нажата всё время; код не загружается. Для каждого симптома есть конкретная проверка. Например, для симптома «всё время нажата» объясняется, что если ножки кнопки вставлены не той стороной, D13 всё время остаётся подключённым к 5V и кнопку нужно повернуть на 90 градусов. Задание «Твоя очередь» такое: сделай так, чтобы светодиод переключался не при нажатии, а при отпускании кнопки. Подсказка напоминает, что переменная button становится 1 в момент нажатия и 0 в момент отпускания. Решение — изменение одного символа: строка if (button == 1) превращается в if (button == 0). Это маленькое задание проверяет, по-настоящему ли понятна идея обнаружения фронта из шага 3.

Как читать: краткое описание, сопоставление, проверка

  1. Прочитай краткое описание и запиши его одним предложением: Прочитай «Что делает этот код?», затем, не глядя в телефон, запиши программу одним предложением в тетрадь. Для проекта с кнопкой: «Каждое нажатие один раз включает или выключает светодиод».
  2. Сопоставь код с шагами сверху вниз: Открой код в Arduino IDE (с этим помогает кнопка «Копировать ссылку» в «Исходном коде»), найди фрагмент каждого шага в полном коде и допиши номер шага рядом со строкой в виде комментария. Шаги идут в порядке кода: глобальные переменные, setup(), loop().
  3. Отметь строки без пары: Если какая-то строка не входит ни в один шаг (обычно остаются только закрывающие скобки), подумай, почему её не объясняют; если это не скобка, поищи её в объяснениях ещё раз.
  4. Проверь на схеме: Загрузи код и по очереди проверь поведение из краткого описания. Для проекта с кнопкой хватит трёх проверок: одно нажатие, удержание и быстрые повторные нажатия. Перед каждой проверкой скажи вслух, что произойдёт.

Сопоставление пропускают чаще всего, хотя именно оно даёт больше всего. Когда пишешь номера шагов рядом со строками, становится виден скелет кода: какая строка выполняется один раз, а какая постоянно, где каждая переменная читается и где записывается. В проекте с кнопкой lastButton встречается в двух местах: объявляется в шаге 1 и обновляется в шаге 5. То, что видишь своими глазами, запоминается гораздо лучше, чем фраза «переменная — это коробка». Если хочется отдельно разобраться с переменными, циклами и функциями, загляни в основы программирования Arduino.

План занятия с «Разбором кода» на 15 минут

МинутыЧто делаешьГде
0–2Прочитай краткое описание «Что делает этот код?» и запиши программу одним предложениемТелефон, «Разбор кода»
2–6Найди в полном коде каждый фрагмент из «Шаг за шагом» и допиши номера шагов к строкам в виде комментариевТелефон + Arduino IDE
6–8Загрузи код и по очереди проверь поведение из краткого описанияКомпьютер + схема
8–9Прочитай задание «Твоя очередь», предскажи результат и запиши егоТелефон + тетрадь
9–12Внеси одно изменение, загрузи код и понаблюдай за результатомArduino IDE + схема
12–13Если предсказание не сбылось, прочитай «Подсказку» и попробуй ещё разТелефон
13–15Сравни свой вариант с решением через «Показать решение», затем попробуй второе изменение на свой выборТелефон + Arduino IDE

Этот план рассчитан на проект, схема которого уже собрана. Если схема собирается впервые, добавь на неё ещё 10–15 минут или перенеси занятие с «Разбором кода» на следующий день. Последние две минуты — самая ценная часть: собственное небольшое изменение после просмотра решения проверяет понятую идею, а не заученный ответ. В проекте с кнопкой можно, например, перенести светодиод на другой пин или увеличить паузу 50 мс до 300 мс и посмотреть, что станет с быстрыми нажатиями. Один проект в день в таком темпе — это пять бесплатных проектов за неделю, причём действительно понятых. Для более длинного плана загляни в 30-дневную дорожную карту по Arduino.

Стратегия решения заданий «Твоя очередь»

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

  1. Предскажи: Прочитай задание и скажи, какой строки кода коснёшься и что увидишь после изменения. Записанное предсказание не даст потом появиться иллюзии «это и так было понятно».
  2. Измени: Меняй только что-то одно. Если поменять две строки сразу, не понять, какое изменение к чему привело.
  3. Загрузи: Загрузи код в плату и дождись сообщения о том, что загрузка завершена. Если возникает ошибка компиляции, проверь точки с запятой и скобки в изменённой строке.
  4. Понаблюдай: Сравни результат со своим предсказанием. В заданиях на время считай секунды, в заданиях со звуком послушай старый и новый звук один за другим.
  5. Загляни в подсказку: Если предсказание не сбылось или не получается найти, какую строку трогать, прочитай подсказку. Подсказка видна сразу под заданием, поэтому при первом чтении полезно прикрыть её рукой.
  6. Открывай решение последним: Нажимай «Показать решение» только после собственной попытки. Если решение совпадает с твоим, подумай, почему оно верное; если отличается, подумай, почему два подхода дают разные результаты.

Ещё одна польза такого порядка в том, что ошибки становятся поучительными. Допустим, в задании проекта Светофор нужно растянуть жёлтый после зелёного до 1,5 секунды, но по ошибке меняется первая строка delay(300). Вместо ожидаемого ты увидишь, что длиннее становится жёлтый после красного. Такая ошибка гораздо лучше любого решения покажет, что в коде две отдельные жёлтые фазы и что loop() выполняется строка за строкой. Решение задания говорит ровно об этом: строка delay(300) в самом конце loop() превращается в delay(1500), а жёлтый после красного остаётся на 0,3 секунды.

Типы изменений: какое чему учит?

Посмотри на задания в бесплатных проектах, и станет видно, что каждое относится к одному из нескольких типов. Если узнавать тип, проще придумать собственное задание в новом проекте. Примеры в таблице взяты из реальных заданий «Твоя очередь» бесплатных проектов; строка про смену пина — эксперимент, который можно провести самостоятельно в том же проекте.

Тип измененияПримерКакому понятию учитОсторожно
Изменить числоМигающий светодиод: сделай обе строки delay равными delay(1000); Работа с зуммером: подними частоту с 400 Hz до 1000 HzЕдиницы (мс, Hz) и то, как одно значение задаёт поведениеВремя задаётся в миллисекундах: 1500 = 1,5 с. Для задания с частотой нужен пассивный зуммер
Изменить пинВ проекте с переключением светодиода кнопкой перенеси светодиод с D7 на D8: измени провод и строки pinMode(7, OUTPUT) и digitalWrite(7, ledState)Связь кода со схемой; номер пина, который встречается в коде в нескольких местахПереставляй провод при отключённом USB; меняй номер везде в коде
Изменить условиеПереключение кнопкой: button == 0 вместо button == 1; Ночник на LDR: порог с 50 на 300Сравнение, порог, обнаружение фронтаПри изменении порога поведение меняется не постепенно, а скачком в определённой точке
Инвертировать поведениеУправление светодиодом кнопкой (удержание): светодиод обычно горит, а при нажатии гаснетЛогика HIGH и LOW, инверсия условияМеняй либо условие, либо записываемые значения, но не то и другое сразу
Предел циклаПолицейская мигалка на светодиодах: красный светодиод вспыхивает 5 раз вместо 3, for (int i = 0; i < 5; i++)Цикл for, счётчик, число повторенийМеняй только первую строку for; синий продолжает вспыхивать 3 раза
Добавить нижнюю границу в выражениеБегущие огни с регулируемой скоростью: delay(potValue + 50) вместо delay(potValue)Использование показания в вычислении, нижняя границаПауза теперь от 50 до 1073 мс, поэтому за огнём легко следить даже на максимальной скорости
При смене пина переставляй провода при отключённом USB и меняй номер везде, где он встречается в коде: если изменить pinMode и забыть про digitalWrite, светодиод так и не загорится. На Arduino Uno пины 0 и 1 используются для последовательной связи и загрузки кода по USB, поэтому не выбирай эти два пина для экспериментов.

Разбор блоков: то же объяснение, но с блоками

У проектов с блочным видом в разделе «Исходный код» есть переключатель Показать блоками. Включи его, и вместо кода та же программа появится в виде блоков на языке приложения, а соседняя вкладка сменит название с Разбор кода на Разбор блоков. В этом виде краткое описание, «Если не получается» и задание остаются прежними; меняется раздел «Шаг за шагом»: вместо фрагмента кода на каждом шаге видны его блоки, а нажатие на изображение открывает его на весь экран. Блочный вид есть у более чем 100 проектов, в том числе у более чем 30 бесплатных. Блоки нужны только для чтения: в приложении их нельзя редактировать или загрузить в плату, в плату всегда загружается настоящий код.

Лучше всего пользоваться «Разбором блоков», переключаясь туда и обратно между двумя видами. В проекте с кнопкой блоки шага 3 — это блок «установить button в прочитать пин 13» и два вложенных блока «если»; в коде это строка int button = digitalRead(13); и два вложенных if. Блок «установить ledState в не ledState» в шаге 4 — это в точности строка ledState = !ledState;. Сначала прочитай блок и скажи, что он делает, затем выключи переключатель и посмотри на фрагмент кода того же шага. Такое сопоставление блоков с кодом — самый надёжный путь от блочного кода к текстовому; чтобы начать тему с самого начала, загляни в статьи что такое блочный код и блок «если».

Чем «Если не получается» отличается от «Если не работает»

ОсобенностьЕсли не получаетсяЕсли не работает
Где?Внутри вкладки «Разбор кода», после «Шаг за шагом»Отдельный раздел на странице проекта
ФорматПары «симптом — решение»; в проекте с кнопкой их 5Упорядоченный чек-лист, который начинается с фразы «Если проект не работает, проверь шаги ниже.»; в проекте с кнопкой 10 шагов
Когда?Симптом известен: «светодиод меняется сам»Непонятно, что не так, и хочется проверить всё с самого начала
ФокусТипичные ошибки, характерные для кода и схемы именно этого проектаОбщие проверки: питание, загрузка кода, номера пинов, соединения и GND
ДоступВ бесплатных проектах открыт для всех, в проектах Premium — с PremiumЕсть более чем в 170 проектах, открывается с Premium

На практике порядок такой: когда схема не работает, опиши симптом одним предложением и поищи его в «Если не получается». Если симптом есть в списке, решение обычно сводится к одному проводу, резистору или строке. Если его нет или предложенное решение не помогает, пройди шаги «Если не работает» по порядку: скорее всего, найдётся пропущенная базовая проверка (питание платы, правильный порт, общая земля GND). Если загвоздка на этапе загрузки, поможет статья код Arduino не загружается, а при ошибках компиляции — ошибки компиляции Arduino.

Для преподавателей: «Разбор кода» на уроке

  • Совместное чтение на проекторе: В начале урока выведи экран телефона на проектор, вместе прочитайте краткое описание «Что делает этот код?» и попроси класс подытожить программу одним предложением. Затем покажи те же шаги в виде блоков, включив «Показать блоками»; для учеников, которые начинали с блоков, это станет мостиком.
  • Одна группа на шаг: В проекте из 5 шагов раздели класс на 5 групп; каждая группа читает один шаг, находит фрагмент в полном коде и за две минуты объясняет его классу. Пока группа объясняет, остальные спрашивают: «А что было бы без этой строки?»
  • Листок с предсказанием: Напиши задание «Твоя очередь» на доске; каждая группа перед изменением записывает своё предсказание на листке бумаги, затем меняет код и загружает его. Обсуждение разницы между предсказанием и результатом учит больше, чем само выполнение задания.
  • Вопрос на выходе: В последние две минуты урока каждый отвечает на один вопрос. Примеры для проекта с кнопкой: что было бы при удержании кнопки, если бы не было lastButton? Что изменится, если удалить delay(50)? Почему светодиод может меняться сам, если убрать резистор 10 kΩ?

Планируя доступ, учти: раз в бесплатных проектах «Разбор кода» открыт для всех, ученики могут применять этот способ к проектам «Мигающий светодиод», «Светофор», «Полицейская мигалка на светодиодах» и к двум проектам с кнопкой, ничего не платя. В проектах Premium «Разбор кода» открывается с Premium; если хочется перевести класс на проекты Premium, можно раздать коды из пакетов для педагогов, а не оформлять подписку каждому ученику, как описано в статье Arduino-приложение для класса. Если хочется поделиться схемой собственной разработки, можно открыть на форуме тему в категории «Руководство»; шагов «Разбора кода» и блочного вида у неё не будет, поэтому объяснение пишется в тексте темы вручную, а код добавляется через «Добавить код» (урок на своём проекте). В приложении также нет панели, которая показывала бы, какие задания решены каждым учеником; задание проверяется на уроке — по работающей схеме или по фотографии.

Частые ошибки и простые решения

  • Сразу открывать решение: Если нажать «Показать решение», едва прочитав задание, запомнится ответ, но не идея. Правило: сначала предсказание, потом попытка, потом подсказка и в самом конце решение.
  • Копировать, не читая шагов: Взять код через «Копировать» и загрузить его — вариант рабочий, но если перейти к следующему проекту, не прочитав «Шаг за шагом», каждый раз придётся начинать с нуля. После загрузки прочитай хотя бы краткое описание и шаги.
  • Принимать фрагмент кода за всю программу: Фрагменты — это только строки данного шага; если вставить один из них в IDE отдельно, он не скомпилируется. Всегда вноси изменения в полный код.
  • Менять несколько вещей сразу: Если изменить две строки вместе и получить неожиданный результат, не понять, какая из них виновата. Одно изменение на одну загрузку.
  • Менять номер пина только в одном месте: Изменить pinMode и забыть про digitalWrite или провод — одна из самых частых ошибок. Перед изменением отметь все места, где этот номер встречается в коде.
  • Пропускать «Если не получается» и сразу спрашивать на форуме: Ответ часто уже есть в списке «Если не получается» этого проекта. Сначала загляни туда, потом в «Если не работает»; если проблема всё ещё не решена, спроси на форуме, приложив фото схемы и код.
  • Выполнить задание и на этом остановиться: Если после сравнения с решением не сделать собственное небольшое изменение, новое знание останется привязанным к одному заданию. Выбери число, пин или условие самостоятельно.

Когда «Разбор кода» в таком порядке пройден на нескольких проектах, готовый код перестаёт быть закрытой коробкой: можно заранее сказать, какая строка за что отвечает и что будет, если её изменить. Проект «Включение и выключение светодиода кнопкой (вкл/выкл)» хорошо подходит, чтобы выработать эту привычку, потому что в коротком коде сразу видны глобальная переменная, обнаружение фронта, переключатель (toggle) и антидребезг. Если хочется попробовать, открой этот проект в приложении BlueGrays и начни с задания на вкладке «Разбор кода»; те же разделы есть во всех 60 бесплатных проектах.

Частые вопросы

Что такое «Разбор кода» в BlueGrays?

«Разбор кода» — это вкладка в разделе «Исходный код» на странице проекта BlueGrays, которая шаг за шагом объясняет код проекта. В ней есть краткое описание, пронумерованные шаги (у каждого фрагмент кода и объяснение), раздел «Если не получается» и задание «Твоя очередь» с подсказкой и решением. Эта вкладка есть у каждого проекта.

Вкладка «Разбор кода» бесплатная?

В 60 бесплатных проектах (по 20 на каждую платформу) «Разбор кода» открыт для всех: с бесплатным аккаунтом видны краткое описание, шаги, «Если не получается» и задание с решением. В проектах Premium вкладка открывается с Premium.

Как пошагово разобраться в готовом коде Arduino?

Сначала одним предложением сформулируй, что делает код, затем раздели его сверху вниз на части и запиши, что делает каждая: глобальные переменные, setup() и loop(). Обрати внимание на числа и номера пинов, затем измени одно значение и посмотри на результат на плате. «Разбор кода» даёт этот порядок в готовом виде для каждого проекта.

Как посмотреть решение задания «Твоя очередь»?

Нажми кнопку «Показать решение» под заданием: откроется блок РЕШЕНИЕ, где написано, какая строка во что превращается. Закрыть его снова можно кнопкой «Скрыть решение». Больше пользы, если сначала сделать собственную попытку, а решение открыть последним.

Что такое «Разбор блоков»?

В проектах с блочным видом при включении переключателя «Показать блоками» вкладка «Разбор кода» меняет название на «Разбор блоков». Тогда в разделе «Шаг за шагом» на каждом шаге вместо фрагмента кода видны его блоки. Блочный вид есть у более чем 100 проектов.

Разделы «Если не получается» и «Если не работает» — одно и то же?

Нет. «Если не получается» внутри «Разбора кода» — это список пар «симптом — решение», характерных для конкретного проекта; «Если не работает» — отдельный упорядоченный чек-лист на странице проекта. «Если не работает» есть более чем в 170 проектах и открывается с Premium.

Все проекты
Включение и выключение светодиода кнопкой (вкл/выкл)
#10Новичок

Включение и выключение светодиода кнопкой (вкл/выкл)

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

4.8(100)
167
Управление светодиодом кнопкой (удержание)
#9Новичок

Управление светодиодом кнопкой (удержание)

Как дверной звонок: свет горит, пока ты нажимаешь, и гаснет, когда отпускаешь. Arduino всё время слушает кнопку; пока она нажата, светодиод горит, а как только ты убираешь палец, он гаснет. Эта просте

4.8(113)
229
Светофор
#3Новичок

Светофор

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

4.8(131)
397
Мигающий светодиод
#1Новичок

Мигающий светодиод

Самое первое «привет» в электронике: включение и выключение одного светодиода. Arduino включает и выключает светодиод через короткие промежутки, поэтому свет быстро мигает. Ты самым простым способом в

4.6(188)
1127
Полицейская мигалка на светодиодах
#4Новичок

Полицейская мигалка на светодиодах

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

4.7(103)
258
Ночник на LDR
#12Новичок

Ночник на LDR

Маленький ночник, который сам включается, когда темнеет, и гаснет, когда наступает утро. Датчик освещённости измеряет, насколько светло в комнате, и Arduino включает светодиод, когда достаточно темно,

4.8(102)
205
Работа с зуммером
#13Новичок

Работа с зуммером

Интересно, как дверной звонок или сигнализация издают звук? Arduino заставляет маленький зуммер пищать через короткие промежутки: пик, пауза, пик, пауза. Ты видишь, как электричество превращается в зв

4.7(89)
161
Бегущие огни с регулируемой скоростью
#7Средний

Бегущие огни с регулируемой скоростью

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

4.6(72)
146