pinport
Мигание без delay()
То же мигание, но на millis(). Пока идёт delay(), процессор не может делать ничего другого — здесь может.
Два светодиода по очереди
Два вывода и противофаза. Показывает, что состояние выводов независимо.
Бегущий огонь
Четыре светодиода и массив выводов. Первый пример, где код короче схемы.
Светофор
Конечный автомат на трёх светодиодах: состояние, длительность, переход. Основа для любой последовательности.
Кнопка: чтение состояния
Подтяжка внутри контроллера и инверсия логики: нажатая кнопка даёт LOW. Первое, обо что спотыкаются все.
Кнопка зажигает светодиод
Прямая связь входа и выхода. Кратчайший скетч, в котором есть и то и другое.
Антидребезг кнопки
Механический контакт при нажатии дребезжит несколько миллисекунд. Без фильтра одно нажатие считается десятком.
Ёмкостное касание
У ESP32 десять сенсорных выводов. Прикосновение уменьшает показание — порог подбирается на месте.
Кнопка через прерывание
Обработчик вместо опроса. Показывает volatile и IRAM_ATTR — без них работать не будет.
Короткое и длинное нажатие
Одна кнопка — две команды. Различаются по длительности удержания.
Переключатель режимов
Тумблер задаёт режим, а не событие: состояние читается когда угодно.
Плавное разгорание (ШИМ)
ledcWrite и скважность: яркость задаётся долей времени, когда вывод включён.
Дыхание светодиода
Та же яркость, но по синусу. Линейное изменение скважности глаз воспринимает неравномерно.
RGB: перебор цветов
Три канала ШИМ на один светодиод. Показывает, что цвет — это три независимые яркости.
RGB: плавная радуга
Перевод HSV в RGB. Один параметр — оттенок — вместо трёх яркостей.
Потенциометр: чтение АЦП
analogRead и 12 бит разрешения. Значение 0…4095 на всю шкалу.
Потенциометр управляет яркостью
Связка вход-выход через map(). Первый пример, где приборы взаимодействуют.
Сглаживание показаний АЦП
Скользящее среднее по кольцевому буферу. Сырой АЦП шумит на пару единиц всегда.
Порог с гистерезисом
Один порог заставляет выход дребезжать у границы. Два порога — нет.
Звук: одна нота
Пьезоизлучатель на ШИМ. Частота задаёт высоту, скважность — громкость.
Звук: мелодия по нотам
Массив частот и длительностей. Пауза между нотами нужна, иначе они сливаются.
Звук: сирена
Частота меняется непрерывно. Тот же приём, что у плавной яркости, но для звука.
Игра на реакцию
Случайная задержка, вспышка, замер времени до нажатия. Всё вместе: вывод, ввод, время, случайность.
Реле по расписанию
Периодическое включение нагрузки. Реле — единственный способ управлять чем-то мощнее светодиода.
Реле от кнопки с фиксацией
Кнопка без фиксации управляет нагрузкой с фиксацией. Состояние держит программа.
Сервопривод: развёртка
Угол задаётся длительностью импульса. Библиотека прячет это за градусами.
Сервопривод по потенциометру
Ручка задаёт угол напрямую. Классический пример пропорционального управления.
Шаговый двигатель
Полношаговая последовательность на четырёх выводах. Скорость ограничена паузой между шагами.
Аппаратный счётчик импульсов (PCNT)
То же, что «Счётчик импульсов на прерывании», но считает не скетч, а блок PCNT: без обработчика, без volatile и без потерь, когда…
Минимум и максимум за сеанс
Накопление статистики без массива: достаточно двух переменных и первого замера.
Парктроник
Чем ближе препятствие, тем чаще писк. Расстояние превращается в период — приём, который работает и без дисплея.
Ультразвук: медианный фильтр
Одиночный ложный отсчёт у сонара — норма. Медиана из трёх его выбрасывает, среднее — нет.
Фоторезистор: уровень освещённости
Сопротивление падает на свету. Абсолютных единиц нет — нужна калибровка по крайним точкам.
Ночник
Темнее — ярче. Обратная пропорция и гистерезис, чтобы лампа не моргала на границе.
Счётчик пересечений луча
Фоторезистор как датчик прохода. Считается фронт, а не уровень, иначе один проход даст сотню срабатываний.
Датчик Холла
Встроен в кристалл ESP32, внешних деталей не нужно. Реагирует на магнитное поле обоими знаками.
Внутренний термодатчик
Показывает температуру кристалла, а не воздуха: под нагрузкой она заметно выше комнатной.
Кодовый замок
Ввод накапливается в строку и сравнивается с образцом. Сброс по звёздочке.
Счётчик импульсов на прерывании
Основа для расходомера, тахометра, счётчика оборотов: считать в обработчике, считать частоту в loop().
Измерение напряжения делителем
АЦП принимает максимум 3.3 В. Делитель расширяет диапазон, а коэффициент возвращается в коде.
Термистор NTC
Уравнение Стейнхарта–Харта в упрощённой форме: сопротивление в градусы через бета-коэффициент.
Сканер шины I2C
Первое, что запускают, когда датчик на шине не отвечает: перебор всех адресов.
Датчик влажности почвы
Аналоговый вход и обратная шкала: чем влажнее, тем меньше сопротивление и ниже показание.
Автополив
Датчик, порог, насос через реле и обязательная пауза после полива: воде нужно время дойти до датчика.
Датчик движения
PIR выдаёт готовый цифровой уровень. Вся сложность — в удержании света после последнего движения.
Усреднение по времени
Экспоненциальное сглаживание: одна переменная вместо буфера, коэффициент задаёт инерцию.
Почему 60 ампер-часов не значит 60 ампер в течение часа
Тот же аккумулятор, но нагрузка стартерная: две сотни ампер. Паспортная ёмкость измерена неспешным двадцатичасовым разрядом, и при…
OLED: график значения
Кольцевой буфер и столбики. Показывает не только текущее значение, но и как оно менялось.
ИК-пульт: приём кода
Приёмник ловит кадр пульта, а разбирает его блок RMT: импульсы по полмиллисекунды скетч поймать не успеет. Нажмите на кружок приём…
LCD: бегущая строка
Текст длиннее шестнадцати символов показывается окном, которое ползёт по строке.
OLED SSD1306: первый вывод
128x64 точки. Всё рисуется в буфер, на экран попадает по display().
OLED: крупные цифры
Перерисовка кадра целиком: очистка, вывод, display(). Так делается любая динамика.
OLED: индикатор выполнения
Рамка, заливка и проценты. Примитивы GFX: прямоугольники и текст.
OLED: анимация
Шарик, отражающийся от краёв. Скорость и координаты как состояние между кадрами.
Ноль горячее фазы: третья гармоника в офисном щитке
Три фазы, на каждой по киловатту компьютеров и светодиодных светильников. Нагрузка распределена идеально, перекоса нет — а в нулев…
NeoPixel: адресные светодиоды
Одна линия данных на всю ленту. Цвет каждого пикселя задаётся отдельно, показывается по show().
NeoPixel: радуга по ленте
Оттенок зависит от позиции и времени — волна цвета вдоль ленты.
NeoPixel: шкала уровня
Лента как линейный индикатор: зелёный, жёлтый, красный по мере роста значения.
NeoPixel: эффект огня
Случайное мерцание в тёплой части палитры. Простейший генеративный эффект.
Arduino Mega: пятнадцать выводов с ШИМ
Главная причина брать Mega — не память, а выводы. ШИМ здесь на пятнадцати выводах против шести у Uno, и четыре светодиода с плавно…