Справочник UniDev

Класс для управления датчиками, адресными светодиодами (Световое кольцо) и другой периферией.

Определения портов

Значки у каждого порта показывают доступные возможности: аналоговый вход (ADC), цифровой ввод/вывод (DIG) и сервопривод/ШИМ (PWM). Ниже — назначение по умолчанию.

P1 GPIO 12 ADC DIG PWM
Красный сигнал светофора
P2 GPIO 13 ADC DIG PWM
Желтый сигнал светофора
P3 GPIO 14 ADC DIG PWM
Зеленый сигнал светофора / Боковой ультразвук Trig
P4 GPIO 15 ADC DIG PWM
Боковой ультразвук Echo
P5 GPIO 17 ADC DIG PWM
Кнопка
P6 GPIO 16 ADC DIG PWM
Передний ультразвук Trig
P7 GPIO 32 ADC DIG PWM
Передний ультразвук Echo
P8 GPIO 23 ADC DIG PWM
Светодиодное кольцо (занято)

Кратко:

  • Аналоговые датчики (analogSensor, lineSensor): только P1–P4 и P7. На P5, P6, P8 АЦП нет — чтение вернет мусор.
  • Цифровой ввод/вывод (digitalSensor, кнопка): любой порт P1–P8.
  • Серво / ШИМ (servo): P1–P7. P8 технически умеет ШИМ, но занят светодиодным кольцом — использовать не стоит.
  • P7 — самый универсальный порт: единственный аналоговый на ADC1 (не конфликтует с Wi-Fi), без особенностей при загрузке.

Подробнее об аппаратных нюансах отдельных пинов (strapping-пины, конфликт ADC2 с Wi-Fi) см. страницу Ограничения.

Инициализация

begin void begin()

Инициализирует экземпляр UniDev, создавая объект NeoPixel и настраивая режимы пинов. Эту функцию вызывать не обязательно, так как она вызывается автоматически при создании объекта UniDev.

Пример

UniDev module;
void setup() {
    module.begin();
}

Датчики

ultraSonic int ultraSonic(int trig, int echo)

Считывает расстояние с ультразвукового датчика (HC-SR04).

Параметры

  • trig: Trigger пин (P1-P8)
  • echo: Echo пин (P1-P8)

Возвращает

Расстояние в миллиметрах.

Пример

int dist = module.ultraSonic(P6, P7);
if (dist < 100) {
    // Препятствие обнаружено
}
lineSensor int lineSensor(int port)

Считывает аналоговое значение с датчика линии.

Параметры

  • port: Определение порта сенсора (P1-P8).

Возвращает

Аналоговое значение (0-4095).

Пример

int val = module.lineSensor(P3);
digitalSensor int digitalSensor(int port)

Считывает цифровое значение с порта.

Параметры

  • port: Определение порта (P1-P8).

Возвращает

0 (LOW) или 1 (HIGH).

Пример

if (module.digitalSensor(P5) == 1) {
    // Датчик активен
}
analogSensor int analogSensor(int port)

Считывает общее аналоговое значение с порта.

Параметры

  • port: Определение порта (P1-P8).

Возвращает

Аналоговое значение (0-4095).

Пример

int lightLevel = module.analogSensor(P4);
getPinMode int getPinMode(uint8_t pin)

Возвращает текущий настроенный режим GPIO пина.

Возвращает

OUTPUT, INPUT, INPUT_PULLUP, INPUT_PULLDOWN, или -1 при ошибке.

Пример

int mode = module.getPinMode(P2);

Входы

waitButton void waitButton(int port)

Блокирующая функция, останавливающая выполнение программы до тех пор, пока кнопка не будет нажата и отпущена.

Параметры

  • port: Порт, к которому подключена кнопка (например, P5).

Пример

// Ждать нажатия кнопки
module.waitButton(P5);
getButtonState bool getButtonState(int port)

Проверяет, нажата ли кнопка в данный момент.

Возвращает

true если нажата, false в противном случае.

Пример

if (module.getButtonState(P5)) {
    Serial.println("Button Pressed!");
}

Сервопривод

servo void servo(int port, int angle)

Устанавливает угол сервопривода, подключённого к указанному порту.

Параметры

  • port: Порт, к которому подключён сервопривод (например, P1).
  • angle: Угол поворота в градусах (0–180).

Пример

module.servo(P3, 0);   // Начальное положение
module.servo(P3, 90);  // Среднее положение
module.servo(P3, 180); // Конечное положение
servoAttach void servoAttach(int port)

Подключает сервопривод к порту и резервирует PWM-канал без задания угла. Опциональный вызов — servo() подключает автоматически при первом обращении. Используется, когда нужно занять канал заранее.

Параметры

  • port: Порт, к которому подключён сервопривод (например, P3).

Пример

module.servoAttach(P3); // Резервируем PWM-канал заранее
module.servo(P3, 90);   // Затем используем
servoDetach void servoDetach(int port)

Отключает сервопривод: PWM-импульсы прекращаются, привод расслабляется и не держит нагрузку. Используется для защиты от поломки, когда механизм упирается или удерживает груз. Следующий вызов servo() снова включит его автоматически.

Параметры

  • port: Порт, к которому подключён сервопривод (например, P3).

Пример

module.servo(P3, 90);    // Устанавливаем угол
delay(1000);
module.servoDetach(P3);  // Отключаем — привод обмякает

Световое кольцо (Базовое)

pixel void pixel(int index, int r, int g, int b)

Устанавливает цвет одного пикселя.

Параметры

  • index: Индекс светодиода (0-23).
  • r, g, b: Компоненты цвета (0-255).

Пример

// Установить 1-й светодиод в Синий
module.pixel(0, 0, 0, 255);
pixelsAll void pixelsAll(int r, int g, int b)

Устанавливает все светодиоды кольца в указанный RGB цвет.

Пример

module.pixelsAll(255, 0, 0); // Все Красные
pixelsClear void pixelsClear()

Выключает все светодиоды.

Пример

module.pixelsClear();
pixelsShow void pixelsShow()

Отправляет текущий буфер на светодиодную ленту.

Пример

module.pixelsShow();
pixelsBrightness void pixelsBrightness(int brightness)

Устанавливает глобальное масштабирование яркости.

Параметры

  • brightness: от 0 до 100.

Пример

module.pixelsBrightness(50); // Приглушить светодиоды

Световое кольцо (Эффекты)

Это блокирующие анимации.

pixelsRainbow void pixelsRainbow(int speed, int duration)

Отображает вращающуюся радугу.

Параметры

  • speed: Скорость вращения (0-100). Большие значения означают более быстрое вращение.
  • duration: Общая длительность анимации в миллисекундах.

Пример

module.pixelsRainbow(50, 2000); // 2 секунды
pixelsRunning void pixelsRunning(int r, int g, int b, int duration)

Эффект бегущего огня: один пиксель пробегает по кругу один раз.

Параметры

  • r, g, b: Цвет бегущего пикселя (0-255).
  • duration: Время в миллисекундах для завершения одного полного круга.

Пример

module.pixelsRunning(255, 0, 0, 1000); // Красный пиксель пробегает круг за 1с
pixelsBreathing void pixelsBreathing(int r, int g, int b, int duration)

Плавно меняет яркость светодиодов (эффект дыхания).

Параметры

  • r, g, b: Целевой цвет при максимальной яркости (0-255).
  • duration: Общая длительность одного цикла дыхания (возрастание + затухание) в миллисекундах.

Пример

module.pixelsBreathing(0, 0, 255, 3000); // Синее дыхание в течение 3с
pixelsFill void pixelsFill(int r, int g, int b, int duration)

Постепенно заполняет кольцо цветом, затем постепенно очищает его.

Параметры

  • r, g, b: Цвет заполнения (0-255).
  • duration: Общая длительность последовательности заполнения и очистки в миллисекундах.

Пример

module.pixelsFill(0, 255, 0, 1000); // Зеленое заполнение+очистка за 1с
pixelsSparkle void pixelsSparkle(int r, int g, int b, int duration, int count)

Случайным образом мигает отдельными пикселями.

Параметры

  • r, g, b: Цвет вспышек (0-255).
  • duration: Общая длительность эффекта в миллисекундах.
  • count: Количество вспышек за указанную длительность.

Пример

module.pixelsSparkle(255, 255, 255, 2000, 20); // 20 белых вспышек за 2с
pixelsRotating void pixelsRotating(int r, int g, int b, int duration, int segmentLength, int rotations)

Вращает сегмент зажженных светодиодов вокруг кольца несколько раз.

Параметры

  • r, g, b: Цвет сегмента (0-255).
  • duration: Общая длительность ВСЕХ вращений в миллисекундах.
  • segmentLength: Количество светодиодов во вращающемся сегменте (например, 5).
  • rotations: Количество полных оборотов на 360 градусов.

Пример

// Вращать сегмент из 5 красных светодиодов 3 раза за 2 секунды
module.pixelsRotating(255, 0, 0, 2000, 5, 3);
pixelsSpinner void pixelsSpinner(int r, int g, int b, int duration)

Анимация спиннера, зажигающая по одному пикселю, пока кольцо не заполнится, затем перезапускается.

Параметры

  • r, g, b: Цвет спиннера (0-255).
  • duration: Время в миллисекундах для одного полного оборота.

Пример

module.pixelsSpinner(255, 255, 0, 1000);

Светофор

setTrafficLight void setTrafficLight(TrafficLightColor color)

Устанавливает состояние модуля светофора.

Параметры

  • color: TRAFFIC_RED, TRAFFIC_YELLOW, TRAFFIC_GREEN, или TRAFFIC_OFF.

Пример

module.setTrafficLight(TRAFFIC_GREEN);
trafficLightSequence void trafficLightSequence()

Запускает стандартную последовательность светофора (Зеленый -> Желтый -> Красный -> Желтый -> Зеленый).

Пример

module.trafficLightSequence();