Урок 15. Кортежи
Перейдём к ещё одному интересному модулю в наборе - это модуль адресных светодиодов.
Он отличается от обычного модуля светодиода тем, что имеет четыре светодиода, каждый светодиод может гореть любым цветом и к каждому из светодиодов можно обратиться адресно. Именно поэтому светодиоды называются адресными. Подключим модуль адресных светодиодов к плате Гиккон Коннект.
Обратите внимание что на модуле имеется два ряда выводов. Они нужны потому что платы можно последовательно подключать друг к другу. Входящий сигнал подключается к выводу Din, выходящий к выводу Dout.
Для работы с платой и зажигания светодиодов на ней нам потребуется модуль neopixel
, а точнее его часть NeoPixel
. Также будут нужны уже знакомые нам machine
и time
. Цвет светодиода задаётся тремя параметрами - это три составляющих цвета свечения: красный, зелёный и синий. Яркость свечения устанавливается от 0 до 255. Где 0 - цвет погашен, 255- максимально яркий.
Указать цвет свечения нужно одновременно указав три параметра свечения для светодиода. Например, красный будет задаваться как 255 - яркость красного свечения, 0 - зелёного и 0 - синего. Одновременно три параметра мы могли бы указать в списке: [255, 0, 0]
. Но для данного модуля требуется указание цвета свечения в кортеже.
Кортеж - это тоже коллекция значений, которая очень похожа на списки. Основное отличие кортежа в том, что его нельзя изменить. Это делается для того, чтобы случайно не поменять переменную. Например, определим переменную red
и присвоим ей значение составляющих красного цвета. Кортежи, в отличие от списков, определяются круглыми скобками:
red = (255, 0, 0) # красный цвет
Теперь мы точно знаем, что цвет останется красным, и этот кортеж случайно не изменится нигде в программе. Теперь определим цвет, когда ничего не горит (светодиод погашен):
dark = (0, 0, 0) # не горит ничего
Создадим список светодиодов, к которым можно будет обращаться по номеру и указывать каким цветом должен гореть каждый. Для этого нам потребуется импортированная функция NeoPixel
, которой нужно передать вывод к которому подключена плата со светодиодами и количество светодиодов на плате или платах.
# создание списка светодиодов leds = NeoPixel(addr_leds, 4)
Далее напишем функцию в которой пока зажжём первый светодиод красным цветом и погасим его. Для этого укажем номеру светодиода (нумерация начинается с 0) каким цветом гореть. Затем вызовем функцию wrire()
объекта leds
и именно в этот момент светодиод загорится. Пусть он горит 1 секунду. А для того чтобы погасить светодиод, укажем что он должен гореть “никаким” цветом:
def light_leds(): leds[0] = red leds.write() sleep(1) leds[0] = dark leds.write()
Ну а теперь вызовем эту функцию по нажатию на кнопку.
Целиком скрипт будет выглядеть следующим образом:
# импорт модулей from neopixel import NeoPixel from machine import Pin from time import sleep # выводы к которым подключены платы: but = Pin(13, Pin.IN) # кнопка addr_leds = Pin(12) # адресные светодиоды # переменные для определения цветов dark = (0, 0, 0) # не горит ничего red = (255, 0, 0) # красный цвет # создание списка светодиодов leds = NeoPixel(addr_leds, 4) # функция зажигания светодиода def light_leds(): leds[0] = red leds.write() sleep(1) leds[0] = dark leds.write() # основной цикл программы while True: if but.value(): light_leds()
Запомнить:
- Кортежи - это коллекции значений которые нельзя изменять
- Они нужны, чтобы точно быть уверенным, что коллекцию не меняли
- С кортежами можно работать так же как и со списками, за исключением изменения значений
- Кортежи обозначаются круглыми скобками