Featureful Python controller code for WS2811/WS2812/NeoPixels
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

164 lines
3.2KB

  1. from random import random
  2. from colors import Colors
  3. import colors
  4. def clamp8(v):
  5. return 255 if v >= 255 else 0 if v <= 0 else round(v)
  6. class Gradient:
  7. def __init__(self, rgb_colors):
  8. self.colors = rgb_colors[::-1]
  9. def at(self, x):
  10. i_left = int(x * len(self.colors))
  11. i_right = i_left + 1 if i_left < len(self.colors) - 1 else 0
  12. ratio = (x * len(self.colors)) - i_left
  13. return tuple(clamp8(left + ratio * (right - left)) for (left, right) in zip(self.colors[i_left], self.colors[i_right]))
  14. def from_dict(dict):
  15. if 'preset' in dict:
  16. return getattr(Gradients, dict['preset'])
  17. return Gradient([getattr(Colors, color) if isinstance(color, str) else color for color in dict['colors']])
  18. rainbow = Gradient([
  19. Colors.red,
  20. Colors.orange,
  21. Colors.yellow,
  22. Colors.green,
  23. Colors.blue,
  24. Colors.purple
  25. ])
  26. class Gradients:
  27. # Gradient Presets
  28. # Fun
  29. rainbow = rainbow
  30. dark_rainbow = Gradient([
  31. Colors.dark_red,
  32. Colors.dark_orange,
  33. Colors.dark_yellow,
  34. Colors.dark_green,
  35. Colors.dark_blue,
  36. Colors.dark_purple
  37. ])
  38. pale_rainbow = Gradient([
  39. Colors.pale_red,
  40. Colors.pale_orange,
  41. Colors.pale_yellow,
  42. Colors.pale_green,
  43. Colors.pale_blue,
  44. Colors.pale_purple
  45. ])
  46. random = Gradient([Colors.black if i % 2 else rainbow.at(random()) for i in range(0, 100)])
  47. pusheen = Gradient([
  48. Colors.teal,
  49. Colors.pink
  50. ])
  51. peacock = Gradient([
  52. Colors.teal,
  53. Colors.black,
  54. Colors.purple,
  55. Colors.blue,
  56. ])
  57. # Sports
  58. kraken = Gradient([
  59. ( 0, 1, 3), # Navy blue
  60. ( 24, 60, 48), # Light blue
  61. ( 0, 1, 3), # Navy blue (again)
  62. ( 10, 25, 25), # Blue (greenish)
  63. ])
  64. # Holiday
  65. love = Gradient([
  66. Colors.pink,
  67. Colors.black,
  68. Colors.red,
  69. Colors.black
  70. ])
  71. beads = Gradient([
  72. Colors.purple,
  73. Colors.black,
  74. Colors.green,
  75. Colors.yellow,
  76. Colors.black
  77. ])
  78. irish = Gradient([
  79. Colors.dark_green,
  80. Colors.black,
  81. Colors.green,
  82. Colors.black,
  83. ])
  84. bunny = Gradient([
  85. Colors.pink,
  86. Colors.pale_purple,
  87. Colors.black,
  88. Colors.pale_yellow,
  89. Colors.pale_green,
  90. Colors.black,
  91. ])
  92. patriot = Gradient([
  93. Colors.red,
  94. Colors.black,
  95. Colors.black,
  96. Colors.white,
  97. Colors.black,
  98. Colors.black,
  99. Colors.blue,
  100. Colors.black,
  101. Colors.black,
  102. ])
  103. pumpkin = Gradient([
  104. Colors.orange,
  105. Colors.black,
  106. Colors.purple,
  107. Colors.black,
  108. Colors.green,
  109. Colors.black,
  110. ])
  111. turkey = Gradient([
  112. Colors.orange,
  113. Colors.black,
  114. Colors.dark_green,
  115. Colors.black,
  116. Colors.brown,
  117. Colors.black,
  118. Colors.dark_yellow,
  119. Colors.black,
  120. ])
  121. mazel = Gradient([
  122. Colors.blue,
  123. Colors.black,
  124. Colors.white,
  125. Colors.black,
  126. ])
  127. santa = Gradient([
  128. Colors.red,
  129. Colors.white,
  130. Colors.green,
  131. Colors.black,
  132. ])