Блочный код Arduino: мигаем светодиодом, блоки и C++ рядом
Блочный код Arduino для новичков: подключаем светодиод через резистор 220 Ω, смотрим строку C++ за каждым блоком, меняем задержку 100 мс и собираем светофор.
С блочным кодом Arduino первая программа почти всегда одна и та же: мигать светодиодом. В этой статье мы проделаем это от начала до конца. Подключим светодиод к пину 9 через резистор 220 Ω, по одному прочитаем блоки проекта «Мигание светодиодом» в BlueGrays и рядом увидим, в какую строку кода на C++, загружаемого в плату, превращается каждый блок. А ещё ты попробуешь поменять всего одно число, 100 в блоке «ждать 100 мс», и так управлять скоростью мигания светодиода.
Одним светодиодом мы не ограничимся. Шаг за шагом та же логика вырастет в программы, которые поочерёдно мигают двумя светодиодами, работают как светофор и вспыхивают как полицейская мигалка. Потом ты увидишь ту же идею на ESP32 и на Raspberry Pi Pico с MicroPython. В конце — таблица ошибок, которые почти каждый новичок хоть раз совершает. Все проекты из этой статьи в BlueGrays бесплатны вместе с блоками и кодом, а все проекты с блоками по платформам собраны на странице «Блочный код».
Что понадобится?
| Деталь | Кол-во | Примечание |
|---|---|---|
| Arduino Uno (или Nano) | 1 | Подключается к компьютеру по USB |
| Светодиод 5 мм (проще всего с красным) | 1 | Длинная ножка +, короткая ножка - |
| Резистор 220 Ω | 1 | Цветные полосы: красная, красная, коричневая |
| Макетная плата | 1 | Пайка не нужна |
| Провода-перемычки «папа–папа» | 2 | Для D9 и GND |
| Компьютер с Arduino IDE | 1 | Чтобы загрузить код в плату |
Схема: подключаем светодиод к пину 9
У светодиода две ножки, и направление важно. Длинная ножка — это анод (+), а короткая — катод (-); со стороны катода у пластикового корпуса есть плоский срез. Ток течёт только от анода к катоду, поэтому если вставить светодиод наоборот, ничего не произойдёт. Соедини пин 9 Arduino с одним концом резистора 220 Ω, а другой конец резистора — с длинной ножкой светодиода. Затем выведи короткую ножку на GND. Резистор ограничивает ток: если из 5 V вычесть примерно 2 V, которые нужны красному светодиоду, на резисторе останется 3 V, а 3 V / 220 Ω — это около 14 mA. Для светодиода это комфортно, а для пина Arduino безопасно. Значение для светодиода своего цвета можно проверить в калькуляторе резистора для светодиода. Как работает светодиод, рассказано в статье что такое светодиод, а как ряды макетной платы соединены внутри — в статье что такое макетная плата.
| Подключение | Arduino Uno («Мигание светодиодом») | ESP32 («Мигание светодиодом на ESP32») | Raspberry Pi Pico (внешний светодиод) |
|---|---|---|---|
| Длинная ножка светодиода (анод, +) | D9 через 220 Ω | GPIO 5 через 220 Ω | GP14 через 220 Ω |
| Короткая ножка светодиода (катод, -) | GND | GND | GND |
| Пин в блоках и в коде | 9 | 5 | LED_PIN = 14 |
| Задержка в проекте | 100 мс | 500 мс | 0,5 с |
| Напряжение на пине | 5 V | 3,3 V | 3,3 V |
Первая программа в блоках: «Мигание светодиодом»
Когда схема готова, посмотрим на программу. Открой в BlueGrays проект «Мигание светодиодом» и включи в разделе кода переключатель Показать блоками: появятся блоки, как на изображении ниже. Всего блоков семь, и они делятся на две большие группы: вверху настройка (один раз), под ней повторять всегда. Блоки отображаются на языке приложения, поэтому по-русски блок читается как «записать HIGH в пин», по-английски — «write HIGH to pin», а по-турецки — «numaralı pine YÜKSEK yaz».

Блоки внутри группы настройка (один раз) выполняются только один раз: при включении платы или нажатии кнопки сброса. Здесь всего один блок: «настроить пин 9 как OUTPUT». Цифровые пины Arduino могут быть входами или выходами. Раз мы управляем светодиодом, мы говорим плате: «Через этот пин я буду подавать напряжение наружу». Группа повторять всегда начинается после окончания настройки и снова и снова выполняется сверху вниз, пока плата включена. Её четыре блока включают светодиод, ждут 100 миллисекунд, выключают его и ждут ещё 100 миллисекунд. После последнего блока программа возвращается наверх, и светодиод снова загорается. То, что мы называем миганием, — это просто повторение этих четырёх шагов пять раз в секунду.
Блок → строка C++: во что превращается каждый блок?
| Блок | Строка C++ | Что делает |
|---|---|---|
| настройка (один раз) | void setup() { … } | Выполняет содержимое один раз при включении |
| настроить пин 9 как OUTPUT | pinMode(9,OUTPUT); | Делает пин 9 выходом |
| повторять всегда | void loop() { … } | Повторяет содержимое бесконечно |
| записать HIGH в пин 9 | digitalWrite(9,HIGH); | Подаёт на пин 5 V, светодиод загорается |
| ждать 100 мс | delay(100); | Приостанавливает программу на 0,1 с |
| записать LOW в пин 9 | digitalWrite(9,LOW); | Ставит на пине 0 V, светодиод гаснет |
| ждать 100 мс | delay(100); | Светодиод остаётся выключенным 0,1 с |
1// Led Yakma (proje 1): D9'daki LED 100 ms yanar, 100 ms söner
2// LED Blink (project 1): the LED on D9 is on for 100 ms, off for 100 ms
3void setup() {
4 pinMode(9,OUTPUT); // LED pini çıkış / LED pin as output
5}
6
7void loop() {
8 digitalWrite(9,HIGH); // LED'i yak / turn the LED on
9 delay(100); // 100 ms bekle (1000 ms = 1 s) / wait 100 ms (1000 ms = 1 s)
10 digitalWrite(9,LOW); // LED'i söndür / turn the LED off
11 delay(100); // 100 ms bekle / wait 100 ms
12}
13Положи таблицу рядом с кодом, и станет видно, что блоки берут на себя. Форма групп «настройка» и «повторять всегда» соответствует фигурным скобкам функций void setup() и void loop(): от того, в какой группе стоит блок, зависит, внутри какой пары скобок будет записана его строка. В блоках не нужно думать о точке с запятой в конце каждой команды, о заглавных и строчных буквах (pinMode, digitalWrite) или о скобках. Но когда начинаешь править код в Arduino IDE вручную, всё это становится важным: одной пропущенной точки с запятой достаточно для ошибки компиляции. В этом и есть настоящая польза блоков: сначала ты выстраиваешь логику программы, а потом учишься тому, как та же логика записывается в коде.
Что будет, если изменить «ждать 100 мс»?
Время ожидания задаётся в миллисекундах (мс), и 1000 мс — это одна секунда. Оба блока ожидания в проекте стоят на 100 мс, поэтому светодиод 0,1 секунды горит и 0,1 секунды не горит. Один полный цикл занимает 200 мс, то есть светодиод мигает пять раз в секунду. Увеличь число в обоих блоках, и светодиод замедлится; уменьши — и он ускорится. Ниже определённого порога глаз уже не различает отдельные вспышки, и кажется, что светодиод горит постоянно. В таблице показано, что ты увидишь, если изменить оба ожидания:
| Блоки ожидания | Полный цикл | Миганий в секунду | Что видно |
|---|---|---|---|
| 10 мс + 10 мс | 20 мс | 50 | Кажется, что горит постоянно, чуть тусклее |
| 100 мс + 100 мс (значение в проекте) | 200 мс | 5 | Быстрое, чёткое мигание |
| 250 мс + 250 мс | 500 мс | 2 | Мигание, за которым легко следить |
| 500 мс + 500 мс | 1 с | 1 | Раз в секунду, спокойный ритм |
| 1000 мс + 1000 мс | 2 с | 0,5 | 1 секунду горит, 1 секунду не горит |
| 100 мс + 900 мс | 1 с | 1 | Короткая вспышка, долгая темнота |
Расширяем программу: два светодиода, светофор, полицейская мигалка
Если ты умеешь мигать одним светодиодом, для управления несколькими ничего нового не нужно: те же три блока просто повторяются с другими пинами. В проекте «Два светодиода мигают поочерёдно» в настройке выходами делаются два пина: 8 и 9. Внутри «повторять всегда» идут «записать HIGH в пин 8» и «записать LOW в пин 9», затем «ждать 200 мс». Потом записывается обратное, и программа снова ждёт 200 мс. Хитрость в том, что два блока записи выполняются друг за другом без ожидания между ними, поэтому кажется, что светодиоды меняются местами в один и тот же момент. Блок ожидания определяет, сколько длится каждое состояние.
Проект «Светофор» переносит ту же идею на три светодиода: красный на D2, жёлтый на D3, зелёный на D4. Группа «повторять всегда» состоит из четырёх фаз, и каждая следует одному шаблону: по одному блоку «записать HIGH» или «записать LOW» для каждого из трёх светодиодов, затем один блок ожидания. Блоки записи решают, какой светодиод горит, а блок ожидания — как долго. Больше блоков не значит сложнее, просто программа длиннее. Версию ближе к настоящему перекрёстку, с кнопкой для пешеходов, ищи в статье Светофор на Arduino.

| Фаза | Красный (D2) | Жёлтый (D3) | Зелёный (D4) | Ожидание |
|---|---|---|---|---|
| 1 | HIGH | LOW | LOW | 2000 мс (2 с) |
| 2 | LOW | HIGH | LOW | 300 мс |
| 3 | LOW | LOW | HIGH | 2000 мс (2 с) |
| 4 | LOW | HIGH | LOW | 300 мс |
1// Trafik Lambası (proje 3) / Traffic Light (project 3)
2void setup() {
3 pinMode(2,OUTPUT); // Kırmızı / Red
4 pinMode(3,OUTPUT); // Sarı / Yellow
5 pinMode(4,OUTPUT); // Yeşil / Green
6}
7
8void loop() {
9 // Kırmızı yanar, 2 s bekle / Red on, wait 2 s
10 digitalWrite(2,HIGH);
11 digitalWrite(3,LOW);
12 digitalWrite(4,LOW);
13 delay(2000);
14 // Sarı yanar, 0,3 s bekle / Yellow on, wait 0.3 s
15 digitalWrite(2,LOW);
16 digitalWrite(3,HIGH);
17 digitalWrite(4,LOW);
18 delay(300);
19 // Yeşil yanar, 2 s bekle / Green on, wait 2 s
20 digitalWrite(2,LOW);
21 digitalWrite(3,LOW);
22 digitalWrite(4,HIGH);
23 delay(2000);
24 // Sarı yanar, sonra başa (kırmızıya) dön / Yellow on, then back to red
25 digitalWrite(2,LOW);
26 digitalWrite(3,HIGH);
27 digitalWrite(4,LOW);
28 delay(300);
29}
30Проект «Полицейская мигалка» знакомит с двумя новыми видами блоков. Первый — группа глобальные переменные (в начале) с блоком «объявить целое (int) delayTime = 60» внутри. В коде это строка int delayTime = 60;, и она даёт времени вспышки имя. Поскольку в блоках ожидания стоит delayTime, а не число, для изменения скорости достаточно поправить одно число 60, а не четыре отдельных блока. Второй — зелёный блок «повторить 3 раза»: он выполняет четыре блока внутри себя три раза и в C++ становится циклом for(int i=0;i<3;i++).

Посчитаем: при каждой вспышке красный светодиод 60 мс горит и 60 мс не горит, так что одна вспышка длится 120 мс. Три вспышки — это 360 мс, и столько же у синего светодиода. Полный цикл занимает около 0,7 секунды. Поставь delayTime равным 30, и огни будут мигать вдвое быстрее; поставь 120 — и они замедлятся. Переменные и циклы — тема 4-й части серии, где мы подробно разбираем их в статье «повторять всегда», блоки счёта и массивы. Проект «Бегущий огонь», в котором огонёк бежит по ряду светодиодов, — следующий шаг на том же пути.
Та же идея на ESP32 и Raspberry Pi Pico
На ESP32 блоки почти такие же, как на Arduino, потому что ESP32 тоже программируют на C++ в Arduino IDE. В проекте «Мигание светодиодом на ESP32» светодиод подключён к GPIO 5, а блоки ожидания стоят на 500 мс. Строки кода тоже те же: pinMode(5, OUTPUT); digitalWrite(5, HIGH); delay(500);. Отличаются только номер пина, то, что пины ESP32 выдают 3,3 V, и выбор платы ESP32 в Arduino IDE. Всё, что ты изучишь на Uno, напрямую переносится на ESP32.
В проектах на Raspberry Pi Pico блоки превращаются в код на MicroPython, а названия блоков немного меняются. В проекте «Внешний светодиод на Raspberry Pi Pico» светодиод подключён к GP14. Блок «пин led : GP LED_PIN , OUTPUT» соответствует led = Pin(LED_PIN, Pin.OUT), «включить (on) пин led» — led.on(), «ждать 0.5 с» — time.sleep(0.5), а «повторять всегда» — циклу while True:. Обрати внимание: в MicroPython ожидание задаётся в секундах, а не в миллисекундах; delay(500) из Arduino превращается в time.sleep(0.5). Если хочется попробовать вообще без проводов, проект «Мигание встроенным светодиодом Raspberry Pi Pico» зажигает светодиод на GP25 прямо на плате; на Pico W к встроенному светодиоду обращаются по имени «LED», а не GP25.
1# Pico harici LED (proje 8163), seri port satırları çıkarıldı
2# Pico external LED (project 8163), serial print lines removed
3from machine import Pin
4import time
5
6LED_PIN = 14 # GP14, herhangi bir boş GPIO / any free GPIO
7led = Pin(LED_PIN, Pin.OUT) # pini çıkış yap / set the pin as output
8
9while True: # sürekli tekrarla / loop forever
10 led.on() # LED'i yak / turn the LED on
11 time.sleep(0.5) # 0,5 saniye bekle / wait 0.5 s
12 led.off() # LED'i söndür / turn the LED off
13 time.sleep(0.5)
14Частые ошибки и как их исправить
| Ошибка | Признак | Решение |
|---|---|---|
| Светодиод вставлен наоборот | Светодиод вообще не горит | Длинная ножка через резистор к пину, короткая к GND; переверни светодиод |
| Нет резистора | Светодиод слишком яркий, греется, может быстро выйти из строя | Поставь резистор 220 Ω последовательно со светодиодом |
| Пин в блоке не совпадает со схемой | Загрузка проходит, но светодиод не горит | 9 в блоке и D9 в схеме должны совпадать; поменяй либо провод, либо число |
| Забыт второй блок ожидания | Светодиод кажется постоянно включённым | После блока «записать LOW» тоже должен быть блок ожидания (delay) |
| Слишком короткое ожидание (например, 5 мс) | Светодиод горит ровно и чуть тускло | Попробуй не меньше 50–100 мс |
| Обе ножки светодиода в одном ряду макетной платы | Светодиод вообще не горит | Вставь ножки в разные ряды; отверстия одного ряда соединены внутри |
| Выбрана не та плата или не тот порт | Arduino IDE показывает ошибку загрузки | Выбери нужную плату и порт в меню «Инструменты» (Tools) |
Пошагово в приложении: от блоков к плате
- Открой в BlueGrays проект Мигание светодиодом: в списке проектов у него есть метка «Блоки». Можно также включить фильтр «Проекты с блоками», чтобы в списке остались только проекты с блоками.
- Следуя схеме подключения, установи на макетную плату светодиод, резистор 220 Ω и два провода.
- В разделе кода включи переключатель Показать блоками. Вместо кода появятся блоки; нажми на изображение, чтобы открыть его на весь экран.
- Перейди на вкладку Разбор блоков. Программа объясняется шаг за шагом, и на каждом шаге видны только его блоки и то, что они делают.
- Выключи переключатель, чтобы вернуться к настоящему коду, скопируй его и вставь в Arduino IDE. Блоки не загружаются в плату напрямую: в неё всегда попадает именно этот код.
- В Arduino IDE выбери плату Arduino Uno и нужный порт, затем нажми «Загрузка» (Upload). Если IDE ещё не установлена, статья Установка Arduino IDE проведёт тебя по шагам.
- Когда светодиод замигает, замени обе строки delay(100) на delay(1000), загрузи код снова и посмотри на разницу своими глазами.
В этой статье светодиод мигает всё время в одном ритме, а программа никак не слушает внешний мир. Следующий шаг — научить плату принимать решения: 3-я часть серии, кнопка и блок «если», рассказывает о программе, которая зажигает светодиод при нажатии кнопки, и о том, как блок «если» превращается в if/else на C++.
В приложении BlueGrays можно посмотреть проекты «Мигание светодиодом», «Два светодиода мигают поочерёдно», «Светофор», «Полицейская мигалка» и проекты со светодиодами для ESP32 и Pico вместе со схемами подключения и кодом, переключиться на блочную версию той же программы через Показать блоками и прочитать, что делает каждый шаг, на вкладке Разбор блоков.
Частые вопросы
Что такое блочный код Arduino?
Это способ показать программу для Arduino не набранным текстом, а блоками, которые соединяются как кусочки пазла. Каждый блок, например «записать HIGH в пин 9» или «ждать 100 мс», соответствует одной строке кода на C++, загружаемого в плату. Без забот о точках с запятой и скобках новички могут сначала сосредоточиться на логике программы.
Как мигать светодиодом с помощью блочного кода?
Помести «настроить пин 9 как OUTPUT» в группу настройки, а «записать HIGH в пин 9», «ждать 100 мс», «записать LOW в пин 9» и «ждать 100 мс» — в группу «повторять всегда». В схеме светодиод подключается к D9 через резистор 220 Ω. Эти блоки превращаются в строки pinMode, digitalWrite и delay.
Почему светодиод горит постоянно, а не мигает?
Самая частая причина — нет блока ожидания после блока «записать LOW». Тогда светодиод выключен лишь микросекунды, и глаз этого не замечает. Если ожидания очень короткие (например, 5 мс), светодиод тоже кажется горящим постоянно; попробуй 100 мс или больше.
Какой резистор нужен для светодиода на Arduino?
Для пинов 5 V на Arduino Uno чаще всего выбирают 220 Ω: через красный светодиод тогда течёт около 14 mA. Подойдёт и 330 Ω, светодиод будет чуть тусклее. Резистор ограничивает ток, к какой бы ножке светодиода он ни был подключён; главное, чтобы он стоял последовательно.
Можно ли загрузить блоки прямо в Arduino?
Нет. Блоки в BlueGrays помогают читать и понимать программу, а в плату всегда загружается настоящий код проекта. Ты копируешь этот код в Arduino IDE (для Pico — в Thonny) и загружаешь его оттуда.
Сколько секунд в 1000 мс и как изменить скорость мигания?
1000 миллисекунд — это 1 секунда. Чем больше число в блоках ожидания, тем медленнее мигает светодиод, чем меньше — тем быстрее: при 100 мс в обоих блоках светодиод мигает 5 раз в секунду, при 500 мс — раз в секунду. В блоках MicroPython для Pico время записывается в секундах, поэтому 0.5 — это полсекунды.
Что собрать после прочтения
Все проекты
Мигающий светодиод
Самое первое «привет» в электронике: включение и выключение одного светодиода. Arduino включает и выключает светодиод через короткие промежутки, поэтому свет быстро мигает. Ты самым простым способом в

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

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

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

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

Мигающий светодиод на ESP32
Учит базовой работе с выходами GPIO на ESP32. Эффект мигания получается включением и выключением светодиода с цифрового пина. Это ESP32-версия классического проекта мигания на Arduino UNO; базовые команды мигания в среде Arduino те же, но расположение пинов ESP32 и уровни GPIO 3,3 V отличаются от Arduino UNO.

Светофор на ESP32
Реалистичная симуляция светофора на 3 светодиодах — красном, жёлтом и зелёном. Тайминги близки к реальной логике движения: красный долго, жёлтый коротко, зелёный долго. Классический пример последовательного управления GPIO.

Raspberry Pi Pico: управление внешним светодиодом (макетная плата)
Следующий шаг после встроенного светодиода Pico: подключить внешний светодиод на макетной плате и управлять им через пин GP14. В этом проекте ты узнаешь, как использовать любой пин GPIO общего назначения у Pico как выход, какая полярность у светодиода (длинная ножка = анод/+, короткая = катод/–) и зачем нужен токоограничивающий резистор (220Ω). Без резистора через светодиод пойдёт слишком большой ток, и он может сгореть. Схема очень простая: Pico GP14 → резистор 220Ω → светодиод → GND.
Другие статьи
Приложение BlueGrays
Собери эту схему шаг за шагом в телефоне
Схема подключения, код и список деталей на одном экране. 200+ проектов на Arduino, ESP32 и Pico готовы к сборке.
Наведи камеру телефона
Наведи камеру на код — откроется магазин приложений на телефоне.
или открыть магазин

