LED-лента¶
LED-лента позволяет управлять светодиодами на квадрокоптере с помощью Python. Вы можете запускать готовые анимации, задавать один цвет для всей ленты или управлять каждым светодиодом отдельно.
Инициализация¶
from clover2 import Clover2
drone = Clover2()
# или с именем ноды:
drone = Clover2("my_drone")
Clover2 — обертка над ROS 2 Node. При создании объекта Clover2 создается нода и запускается фоновый поток для работы ROS 2.
Анимации¶
Самый простой способ управлять лентой — использовать встроенные анимации. Каждая анимация принимает параметр duration, который задает длительность анимации в секундах.
Если duration не указан, анимация будет работать до тех пор, пока вы не запустите другую анимацию или не отправите прямую команду управления лентой.
drone.led().rainbow(period=2.0, duration=5.0) # радуга, полный цикл за 2 с, 5 секунд
drone.led().blink(255, 0, 0, period=0.5) # красное мигание, период 0.5 с
drone.led().solid_color(0, 255, 0, duration=1.0) # зеленая заливка на 1 секунду
drone.led().clear() # выключение всех светодиодов
В параметре period задайте продолжительность одного цикла анимации.
В параметре duration задайте общее время работы анимации.
Например, led.rainbow(period=2.0, duration=5.0) означает, что один цикл анимации занимает 2 секунды, а сама анимация работает 5 секунд.
Параметры анимаций:
Метод |
Аргументы |
|---|---|
|
|
|
|
|
заливка всей ленты одним цветом |
|
выключение всех светодиодов |
Прямое управление¶
С помощью прямого управления вы можете задать один цвет для всей ленты.
# Заливка всей ленты
drone.led().fill(255, 255, 0) # желтый
В этом примере все светодиоды получают одинаковый цвет.
Для управления отдельными светодиодами используйте попиксельное управление. Сначала создайте массив цветов для всех светодиодов.
Внимание
При попиксельном управлении количество элементов в массиве должно совпадать с количеством светодиодов в ленте.
count = drone.led().led_count # количество светодиодов в ленте
leds = [(0, 0, 0)] * count # выключает ленту
leds[4] = (0, 255, 0) # делает 5-й светодиод зеленым
# Попиксельное управление - [(r, g, b), ...]
drone.led().send_frame(leds, brightness=0.5)
Каждый элемент массива leds задает цвет одного светодиода в формате (r, g, b).
В Python нумерация элементов массива начинается с нуля. Поэтому leds[4] соответствует пятому светодиоду на ленте.
Пример: демонстрация эффектов¶
В этом примере программа последовательно запускает несколько эффектов: радугу, мигание и заливку ленты тремя цветами.
import time
from clover2 import Clover2
drone = Clover2()
drone.led().rainbow(period=2.0, duration=5.0)
time.sleep(5.5)
drone.led().blink(255, 255, 255, period=0.5, duration=5.0)
time.sleep(5.5)
for r, g, b in [(255, 0, 0), (0, 255, 0), (0, 0, 255)]:
drone.led().solid_color(r, g, b, duration=1.0)
time.sleep(1.2)
drone.led().clear()
duration=5.0 задает продолжительность анимации, а time.sleep(5.5) не позволяет программе перейти к следующей команде сразу после запуска анимации.
После завершения последней заливки программа выполняет clear() и выключает все светодиоды.