Галерея проектов
Любой проект можно открыть, запустить и сделать своей копией. У каждого примера есть разбор: что на схеме, какие библиотеки нужны и что делает код.
Кнопка зажигает светодиод
Прямая связь входа и выхода. Кратчайший скетч, в котором есть и то и другое.
Кнопка через прерывание
Обработчик вместо опроса. Показывает volatile и IRAM_ATTR — без них работать не будет.
Кнопка-триггер
Нажал — включилось, нажал ещё раз — выключилось. Реакция на фронт, а не на уровень.
Кнопка: чтение состояния
Подтяжка внутри контроллера и инверсия логики: нажатая кнопка даёт LOW. Первое, обо что спотыкаются все.
Кодовый замок
Ввод накапливается в строку и сравнивается с образцом. Сброс по звёздочке.
Конфиг в JSON и в памяти
Настройки хранятся строкой JSON в NVS: одно поле вместо десяти ключей, и добавить новое можно не ломая старое.
Короткое и длинное нажатие
Одна кнопка — две команды. Различаются по длительности удержания.
Кухонные весы
Вес на индикаторе с округлением до грамма и подавлением дрожания последнего разряда.
Матрица 8×8: первая точка
Микросхема после подачи питания выключена, и это первое, обо что спотыкаются. Дальше — точки, строки и вся матрица.
Матрица: рисунок и мигание
Картинка хранится восемью байтами — по байту на строку. Так её удобно и рисовать в коде, и отправлять.
Матричная клавиатура 4x4
Шестнадцать кнопок на восьми выводах. Сканирование по строкам и чтение столбцов.
Метеостанция с журналом
Датчик, часы и карта вместе: раз в минуту строка в файл, имя файла — из даты.
Метроном
Темп задаётся потенциометром, щелчок — коротким импульсом. Пример совместной работы трёх устройств.
Мигание без delay()
То же мигание, но на millis(). Пока идёт delay(), процессор не может делать ничего другого — здесь может.
Минимум и максимум за сеанс
Накопление статистики без массива: достаточно двух переменных и первого замера.
Настольные часы на OLED
Часы и экран на одной шине I2C: два устройства, два провода. Экран перерисовывается только когда сменилась секунда.
Несколько задач по времени
Три независимых периода в одном loop(). Каждая задача помнит своё время последнего запуска.
Ночник
Темнее — ярче. Обратная пропорция и гистерезис, чтобы лампа не моргала на границе.
Обратный отсчёт до срока
Разность двух моментов времени: RTClib считает её сама, и переносы через сутки и месяцы считать руками не надо.
Парктроник
Чем ближе препятствие, тем чаще писк. Расстояние превращается в период — приём, который работает и без дисплея.
Переключатель режимов
Тумблер задаёт режим, а не событие: состояние читается когда угодно.
Плавное разгорание (ШИМ)
ledcWrite и скважность: яркость задаётся долей времени, когда вывод включён.
Порог с гистерезисом
Один порог заставляет выход дребезжать у границы. Два порога — нет.
Потенциометр управляет яркостью
Связка вход-выход через map(). Первый пример, где приборы взаимодействуют.