Слияние кода завершено, страница обновится автоматически
"""
The MIT License (MIT)
Copyright © 2020 Walkline Wang (https://walkline.wang)
https://gitee.com/walkline/esp32-ble
"""
from machine import Pin, PWM, Timer
from utime import sleep_ms
class LedPadException(Exception):
pass
class LedBase(object):
def __init__(self, io, pwm=True):
if pwm:
self.__pin = PWM(Pin(io, Pin.OUT, Pin.PULL_DOWN, value=0), freq=1000000, duty=0)
else:
self.__pin = Pin(io, Pin.OUT, Pin.PULL_DOWN, value=0)
self.__pwm = pwm
self.__brightness = LedPad.Brightness.MEDIUM
def deinit(self):
if self.__pwm:
self.__pin.deinit()
else:
self.__pin = None
def set_brightness(self, value):
self.__brightness = value
def on(self):
if self.__pwm:
self.__pin.duty(self.__brightness)
def off(self):
if self.__pwm:
self.__pin.duty(0)
def duty(self, value):
if self.__pwm:
self.__pin.duty(value)
class LedPad(object):
"""
5*4 LED 矩阵驱动
"""
class Brightness(object):
NONE = const(0)
LOW = const(20)
MEDIUM = const(60)
HIGH = const(200)
class Mode(object):
OFF = const(0)
ON = const(1)
BREATH = const(2)
def __init__(self, pin_set=None):
assert pin_set is not None and isinstance(pin_set, tuple) and len(pin_set) == 2, LedPadException("pin_set must be a tuple, e.g. ((row output io), (column input io))")
self.__row_io_set = []
self.__column_io_set = []
try:
for io in pin_set[0]:
self.__row_io_set.append(LedBase(io))
for io in pin_set[1]:
self.__column_io_set.append(LedBase(io, False))
except IndexError:
raise LedPadException("pin_set value error")
self.__row_count = len(self.__row_io_set)
self.__column_count = len(self.__column_io_set)
assert self.__row_count > 0 and self.__column_count > 0, LedPadException("pin_set value error")
self.__brightness = self.Brightness.MEDIUM
self.__mode = self.Mode.BREATH
self.__timer = Timer(12)
self.__timer_start = False
self.__duty = 0
self.__duty_step = 10
def __timer_cb(self, timer):
for io in self.__row_io_set:
io.duty(self.__duty)
self.__duty += self.__duty_step
if self.__duty == 0 or self.__duty >= self.__brightness:
self.__duty_step = - self.__duty_step
def deinit(self):
self.__timer.deinit()
for io in self.__row_io_set:
io.deinit()
for io in self.__column_io_set:
io.deinit()
self.__timer = None
self.__row_io_set = None
self.__column_io_set = None
@property
def brightness(self):
return self.__brightness
@brightness.setter
def brightness(self, value):
self.__brightness = value
for io in self.__row_io_set:
io.set_brightness(self.brightness)
@property
def mode(self):
return self.__mode
@mode.setter
def mode(self, value):
self.__mode = value
def start(self):
if self.__timer_start:
self.__timer.deinit()
if self.__mode == self.Mode.OFF:
for io in self.__row_io_set:
io.off()
elif self.__mode == self.Mode.ON:
for io in self.__row_io_set:
io.on()
elif self.__mode == self.Mode.BREATH:
self.__duty = 0
self.__timer.init(
mode=Timer.PERIODIC,
period=40,
callback=self.__timer_cb
)
self.__timer_start = True
def get_led_count(self):
"""
获取 Led 数量
"""
return self.__row_count * self.__column_count
def self_check(self):
"""
灯光自检
"""
for index in range(self.__row_count):
self.__row_io_set[index].on()
sleep_ms(200)
self.__row_io_set[index].off()
def main():
ROW_SET = (5, 17, 16, 4, 15) # for output
COLUMN_SET = (22, 21, 19, 18) # for intput
PIN_SET = (ROW_SET, COLUMN_SET)
ledpad = LedPad(PIN_SET)
print("LedPad led count:", ledpad.get_led_count())
ledpad.brightness = LedPad.Brightness.HIGH
ledpad.self_check()
ledpad.start()
# ledpad.deinit()
# ledpad = None
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print("\nPRESS CTRL+D TO RESET DEVICE")
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарий ( 0 )