Featureful Python controller code for WS2811/WS2812/NeoPixels
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

154 Zeilen
3.0KB

  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. irish = Gradient([
  72. Colors.dark_green,
  73. Colors.black,
  74. Colors.green,
  75. Colors.black,
  76. ])
  77. bunny = Gradient([
  78. Colors.pink,
  79. Colors.pale_purple,
  80. Colors.black,
  81. Colors.pale_yellow,
  82. Colors.pale_green,
  83. Colors.black,
  84. ])
  85. patriot = Gradient([
  86. Colors.red,
  87. Colors.black,
  88. Colors.black,
  89. Colors.white,
  90. Colors.black,
  91. Colors.black,
  92. Colors.blue,
  93. Colors.black,
  94. Colors.black,
  95. ])
  96. pumpkin = Gradient([
  97. Colors.orange,
  98. Colors.black,
  99. Colors.purple,
  100. Colors.black,
  101. ])
  102. turkey = Gradient([
  103. Colors.orange,
  104. Colors.black,
  105. Colors.dark_green,
  106. Colors.black,
  107. Colors.brown,
  108. Colors.black,
  109. Colors.dark_yellow,
  110. Colors.black,
  111. ])
  112. mazel = Gradient([
  113. Colors.blue,
  114. Colors.black,
  115. Colors.white,
  116. Colors.black,
  117. ])
  118. santa = Gradient([
  119. Colors.red,
  120. Colors.white,
  121. Colors.green,
  122. Colors.black,
  123. ])