Галерея проектов
Любой проект можно открыть, запустить и сделать своей копией. У каждого примера есть разбор: что на схеме, какие библиотеки нужны и что делает код.
Serial: чтение по строкам
Байты копятся до перевода строки. Без этого команда приходит по кускам.
WiFi: подключение с переподключением
Соединение может пропасть в любой момент. Проверка состояния в loop() — не роскошь.
Бегущая строка по цепочке
Четыре модуля — это 32 столбца одного полотна. Строка едет по буферу, а на модули раскладывается по восемь столбцов.
Внутренний термодатчик
Показывает температуру кристалла, а не воздуха: под нагрузкой она заметно выше комнатной.
Датчик влажности почвы
Аналоговый вход и обратная шкала: чем влажнее, тем меньше сопротивление и ниже показание.
Замер времени выполнения
micros() и разница до/после. Первый шаг к оптимизации — узнать, что именно медленное.
Звук: сирена
Частота меняется непрерывно. Тот же приём, что у плавной яркости, но для звука.
Карта SD: чтение и запись файлов
Карта на аппаратном SPI с готовой файловой системой. На ней уже лежит README.TXT — его и читает пример.
Матрица 8×8: первая точка
Микросхема после подачи питания выключена, и это первое, обо что спотыкаются. Дальше — точки, строки и вся матрица.
Парктроник
Чем ближе препятствие, тем чаще писк. Расстояние превращается в период — приём, который работает и без дисплея.
Сенсорный выключатель
Касание вместо кнопки, с той же логикой фронта. Механики нет, дребезга тоже.
Сервопривод: развёртка
Угол задаётся длительностью импульса. Библиотека прячет это за градусами.
Таймер обратного отсчёта
Минуты и секунды на четырёх разрядах. Кнопка запускает и сбрасывает, а отсчёт идёт по millis, а не по delay.
Термометр на индикаторе
Показать -3.7°C на семисегментном индикаторе: знак, десятые и буква. Буквы C знакогенератор не знает — значит рисуем сегментами са…
Ультразвук: медианный фильтр
Одиночный ложный отсчёт у сонара — норма. Медиана из трёх его выбрасывает, среднее — нет.
Частота процессора и потребление
Понижение частоты снижает ток. Видно и по времени выполнения одной и той же работы.
FreeRTOS: очередь между задачами
Правильный способ передать данные из задачи в задачу. Общая переменная без защиты рано или поздно подведёт.
OLED: крупные цифры
Перерисовка кадра целиком: очистка, вывод, display(). Так делается любая динамика.
Preferences: настройки прибора
Несколько значений разных типов, значения по умолчанию и сброс к заводским. Плюс то, о чём молчат: запись изнашивает память.
TimeLib и часы: кто кого сверяет
setSyncProvider: библиотека сама раз в пять минут спрашивает время у микросхемы. Одна строка вместо ручной сверки.
Автополив
Датчик, порог, насос через реле и обязательная пауза после полива: воде нужно время дойти до датчика.
Аппаратный счётчик импульсов (PCNT)
То же, что «Счётчик импульсов на прерывании», но считает не скетч, а блок PCNT: без обработчика, без volatile и без потерь, когда…
Барометр: тенденция за три часа
Погоду предсказывает не давление, а его изменение. Кольцевой буфер и разность с отсчётом трёхчасовой давности.
Будильник: раз в минуту
Будильник внутри микросхемы: она сама сравнивает время и поднимает признак. Плата может в это время спать.