leds.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import time
  2. from machine import PWM, Pin
  3. from config import LED_LIST
  4. class Leds:
  5. def __init__(self):
  6. self.led_count = len(LED_LIST)
  7. self.pwm = [None] * self.led_count
  8. self.vals = [0] * self.led_count
  9. self.diff = [0.0] * self.led_count
  10. self.stepId = [0] * self.led_count
  11. self.steps = 50
  12. self.frequency = 800
  13. def enable(self, i):
  14. if not self.pwm[i]:
  15. self.pwm[i] = PWM(Pin(LED_LIST[i][1]), channel=LED_LIST[i][2], freq=self.frequency, duty=0)
  16. def enableAll(self):
  17. for i in range(self.led_count):
  18. self.enable(i)
  19. def disable(self, i):
  20. if self.pwm[i]:
  21. self.pwm[i].deinit()
  22. self.pwm[i] = None
  23. def disableAll(self):
  24. for i in range(self.led_count):
  25. self.disable(i)
  26. def setColor(self, i, val):
  27. if not self.pwm[i]:
  28. return
  29. self.diff[i] = float(self.vals[i] - self.pwm[i].duty()) / (self.steps)
  30. self.vals[i] = val
  31. self.stepId[i] = 0
  32. def update(self):
  33. for i in range(self.led_count):
  34. if not self.pwm[i]:
  35. continue
  36. if self.stepId[i] > self.steps:
  37. self.pwm[i].duty(self.vals[i])
  38. else:
  39. self.pwm[i].duty(int(self.vals[i] - self.diff[i] * (self.steps - self.stepId[i])))
  40. self.stepId[i] += 1