Галерея проектов
Любой проект можно открыть, запустить и сделать своей копией. У каждого примера есть разбор: что на схеме, какие библиотеки нужны и что делает код.
Сравнение фильтров
Скользящее среднее, экспоненциальное и медиана на одних данных. Видно, чем они отличаются на выбросах.
Конечный автомат
Состояния, переходы и таблица. Способ описать поведение прибора, который перестаёт помещаться в if-ы.
FreeRTOS: сигнал из прерывания
Обработчик должен быть коротким. Он лишь отдаёт семафор, а работу делает задача.
LCD: меню на двух кнопках
Список пунктов, курсор и выбор. Минимальный интерфейс, из которого вырастает любой прибор.
NVS: сохранение рекордов
Запись только при изменении. Ресурс флеша конечен, и переписывать одно и то же в цикле не стоит.
NeoPixel: шкала уровня
Лента как линейный индикатор: зелёный, жёлтый, красный по мере роста значения.
OLED: график значения
Кольцевой буфер и столбики. Показывает не только текущее значение, но и как оно менялось.
Serial: данные для графика
Числа через запятую в одной строке — формат, который читает построитель графиков.
Serial: журнал в CSV
Заголовок один раз, дальше строки с временем и значениями. Копируется в таблицу как есть.
Автополив
Датчик, порог, насос через реле и обязательная пауза после полива: воде нужно время дойти до датчика.
Антидребезг кнопки
Механический контакт при нажатии дребезжит несколько миллисекунд. Без фильтра одно нажатие считается десятком.
Аппаратный счётчик импульсов (PCNT)
То же, что «Счётчик импульсов на прерывании», но считает не скетч, а блок PCNT: без обработчика, без volatile и без потерь, когда…
Веб-сервер: JSON с показаниями
Машиночитаемый ответ вместо страницы. Откройте «Веб-интерфейс» и наберите /data — отсюда данные забирает что угодно, от скрипта до…
Датчик влажности почвы
Аналоговый вход и обратная шкала: чем влажнее, тем меньше сопротивление и ниже показание.
ИК-пульт: приём кода
Приёмник ловит кадр пульта, а разбирает его блок RMT: импульсы по полмиллисекунды скетч поймать не успеет. Нажмите на кружок приём…
Игра на реакцию
Случайная задержка, вспышка, замер времени до нажатия. Всё вместе: вывод, ввод, время, случайность.
Кнопка зажигает светодиод
Прямая связь входа и выхода. Кратчайший скетч, в котором есть и то и другое.
Кнопка через прерывание
Обработчик вместо опроса. Показывает volatile и IRAM_ATTR — без них работать не будет.
Кнопка-триггер
Нажал — включилось, нажал ещё раз — выключилось. Реакция на фронт, а не на уровень.
Кнопка: чтение состояния
Подтяжка внутри контроллера и инверсия логики: нажатая кнопка даёт LOW. Первое, обо что спотыкаются все.
Кодовый замок
Ввод накапливается в строку и сравнивается с образцом. Сброс по звёздочке.
Короткое и длинное нажатие
Одна кнопка — две команды. Различаются по длительности удержания.
Метроном
Темп задаётся потенциометром, щелчок — коротким импульсом. Пример совместной работы трёх устройств.
Переключатель режимов
Тумблер задаёт режим, а не событие: состояние читается когда угодно.