123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- import time
- from machine import PWM, Pin
- from config import LED_LIST
- class Leds:
- def __init__(self):
- self.led_count = len(LED_LIST)
- self.pwm = [None] * self.led_count
- self.vals = [x[3] for x in LED_LIST]
- self.diff = [0] * self.led_count
- self.stepId = [0] * self.led_count
- self.steps = 50
- self.frequency = 800
- self.enabled = True
-
- def init(self, i):
- if not self.pwm[i]:
- self.pwm[i] = PWM(Pin(LED_LIST[i][1]), channel=LED_LIST[i][2], freq=self.frequency, duty=0)
- def deinit(self, i):
- if self.pwm[i]:
- self.pwm[i].deinit()
- self.pwm[i] = None
- def enable(self):
- self.enabled = True
- for i in range(self.led_count):
- self.diff[i] = float(self.vals[i]) / self.steps
- self.stepId[i] = 0
- def disable(self):
- for i in range(self.led_count):
- self.setColor(i, 0)
- self.enabled = False
- def setSteps(self, n):
- if n < 1:
- n = 1
- self.steps = n
- def setColor(self, i, val):
- if val < 0:
- val = 0
- elif val > 256:
- val = 256
- self.vals[i] = val
- if not self.enabled:
- return
- if not self.pwm[i]:
- self.diff[i] = self.vals[i]
- else:
- self.diff[i] = self.vals[i] - (self.pwm[i].duty() + 1)
- self.stepId[i] = 0
- def update(self):
- for i in range(self.led_count):
- if self.enabled and not self.pwm[i] and self.vals[i]:
- self.init(i)
- elif not self.pwm[i]:
- continue
- if self.stepId[i] > self.steps:
- self.diff[i] = 0
- if self.vals[i] == 0 or not self.enabled:
- self.deinit(i)
- else:
- if self.enabled:
- val = int(self.vals[i] - self.diff[i] * float(self.steps - self.stepId[i]) / self.steps) - 1
- else:
- val = int(-self.diff[i] * float(self.steps - self.stepId[i]) / self.steps)
- if val < 0:
- val = 0
- if val > 255:
- val = 255
- self.pwm[i].duty(val)
- self.stepId[i] += 1
-
|