Примеры программ

Neopixel
Пример программы управления адресной светодиодной лентой
Модуль neopixel позволяет использовать RGB-светодиодные ленты NeoPixel (WS2812) с индивидуальной адресацией и технологией micro:bit. Обратите внимание, что для использования neopixelмодуля вам необходимо импортировать его отдельно с помощью import neopixel



Поскольку micro:bit может подавать только 90 мА на внешние устройства, для большего количества NeoPixels требуется внешний источник питания с общим заземлением. Контроллер поддерживает ленту длиной 256 светодиодов.
Ссылка на документацию
описание задачи
К микроконтроллеру подключены две светодиодные адресные ленты RGB (длина 60 светодиодов).
Контакты подключения: pin0 и pin1.
Организация подцветки заднего фона, который имеет градиент перехода трех цветов: фиолетовый -> синий -> бирюзовый.

методы:
pixel_overflow - светодиоды загораются с лево на право. Далее светодиоды гаснут в обратном порядке. Указываются цвета переходов, границы переходов, время задержки между светодиодами.

pixel_overflow_to_meeting - светодиоды загораются верхняя лента с лево на право, правая лента наоборот. Далее светодиоды гаснут в обратном порядке. Указываются цвета переходов, границы переходов, время задержки между светодиодами.

bundles - светодиоды загораются пучками в пределах световых границ. Далее светодиоды гаснут в обратном порядке. Указываются цвета переходов, границы переходов, размер пучка, время задержки между светодиодами.
Программа
from random import choice

import neopixel
from microbit import pin0, pin1, sleep, display

# Установите длину ленты
tape_length_1 = 60
tape_length_2 = 60
violet = (128, 0, 128)
blue = (0, 0, 255)
turquoise = (48, 213, 200)

np1 = neopixel.NeoPixel(pin0, tape_length_1)
np2 = neopixel.NeoPixel(pin1, tape_length_2)

def pixel_overflow(color, color1, color2, border1, border2, time_sleep=200):

    for pixel_id in range(0, tape_length_1):
        if pixel_id <border1:
            np1[pixel_id] = (color)
            np2[pixel_id] = (color)
        elif border1<=pixel_id<=border2:
            np1[pixel_id] = (color1)
            np2[pixel_id] = (color1)
        else:
            np1[pixel_id] = (color2)
            np2[pixel_id] = (color2)
        np1.show()
        np2.show()
        sleep(time_sleep)

    for pixel_id in range(tape_length_1-1, 0, -1):
        np1[pixel_id] = (0,0,0)
        np2[pixel_id] = (0,0,0)
        np1.show()
        np2.show()
        sleep(time_sleep//2)

def pixel_overflow_to_meeting(color, color1, color2, border1, border2, time_sleep=200):

    for pixel_id in range(0, tape_length_1):
        pixel_id2 = tape_length_1-pixel_id-1
        if pixel_id <border1:
            np1[pixel_id] = (color)
            np2[pixel_id2] = (color2)
        elif border1<=pixel_id<=border2:
            np1[pixel_id] = (color1)
            np2[pixel_id2] = (color1)
        else:
            np1[pixel_id] = (color2)
            np2[pixel_id2] = (color)
        np1.show()
        np2.show()
        sleep(time_sleep)

    for pixel_id in range(tape_length_1-1, -1, -1):
        pixel_id2 = tape_length_1-pixel_id-1
        np1[pixel_id] = (0,0,0)
        np2[pixel_id2] = (0,0,0)
        np1.show()
        np2.show()
        sleep(time_sleep//2)

def  bundles(color, color1, color2, border1, border2, size_bundles, time_sleep=200):

    bundles_list=[]
    for i in range(0, tape_length_1-size_bundles, size_bundles):
        bundles_list.append(i)

    for check in range(0, tape_length_1//size_bundles-1):
        pixel_border = choice(bundles_list)
        bundles_list.remove(pixel_border)
        for pixel_id in range(pixel_border,pixel_border+size_bundles):
            if pixel_id <border1:
                np1[pixel_id] = (color)
                np2[pixel_id] = (color2)
            elif border1<=pixel_id<=border2:
                np1[pixel_id] = (color1)
                np2[pixel_id] = (color1)
            else:
                np1[pixel_id] = (color2)
                np2[pixel_id] = (color)
        np1.show()
        np2.show()
        sleep(time_sleep)
    for pixel_id in range(tape_length_1-1, 0, -1):
        np1[pixel_id] = (0,0,0)
        np2[pixel_id] = (0,0,0)
        np1.show()
        np2.show()
        sleep(0)

if __name__ == '__main__':
    while True:
        pixel_overflow(violet, blue, turquoise, 20,40,100)
        bundles(violet, blue, turquoise, 20, 40, 3, 100)
        fpixel_overflow_to_meeting(violet, blue, turquoise, 20,40,100)