Skip to content

Commit 6eca36d

Browse files
committed
Added test code for Steampunk weekend event
Added test code for Steampunk weekend event. led_test, mood test, neopixel test, led_strip test
1 parent bf4753f commit 6eca36d

12 files changed

+937
-40
lines changed

2t.py

-38
This file was deleted.

bubo.py

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from bubo_library import Bubo2t
2+
from time import sleep
3+
4+
bubo = Bubo2t()
5+
6+
bubo.mouth_open()
7+
sleep(1)
8+
9+
bubo.mouth_close()
10+
sleep(1)
11+

bubo_eyes.py

+264
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,264 @@
1+
import plasma
2+
3+
LEDS = 24
4+
5+
# main.py
6+
7+
from time import sleep
8+
import array, time
9+
from machine import Pin, PWM
10+
import rp2
11+
import math
12+
13+
class ws2812():
14+
# Configure the number of WS2812 LEDs, pins and brightness.
15+
NUM_LEDS = 24
16+
PIN_NUM = 20
17+
__brightness = 0.1
18+
19+
BLACK = (0, 0, 0)
20+
RED = (255, 0, 0)
21+
YELLOW = (255, 150, 0)
22+
GREEN = (0, 255, 0)
23+
CYAN = (0, 255, 255)
24+
BLUE = (0, 0, 255)
25+
PURPLE = (180, 0, 255)
26+
WHITE = (255, 255, 255)
27+
COLORS = (BLACK, RED, YELLOW, GREEN, CYAN, BLUE, PURPLE, WHITE)
28+
29+
@rp2.asm_pio(sideset_init=rp2.PIO.OUT_LOW, out_shiftdir=rp2.PIO.SHIFT_LEFT, autopull=True, pull_thresh=24)
30+
def ws2812():
31+
T1 = 2
32+
T2 = 5
33+
T3 = 3
34+
wrap_target()
35+
label("bitloop")
36+
out(x, 1) .side(0) [T3 - 1]
37+
jmp(not_x, "do_zero") .side(1) [T1 - 1]
38+
jmp("bitloop") .side(1) [T2 - 1]
39+
label("do_zero")
40+
nop() .side(0) [T2 - 1]
41+
wrap()
42+
43+
def __init__(self):
44+
# Create the StateMachine with the ws2812 program, outputting on Pin(16).
45+
self.sm = rp2.StateMachine(0, self.ws2812, freq=8_000_000, sideset_base=Pin(self.PIN_NUM))
46+
47+
# Start the StateMachine, it will wait for data on its FIFO.
48+
self.sm.active(1)
49+
# Display a pattern on the LEDs via an array of LED RGB values.
50+
self.ar = array.array("I", [0 for _ in range(self.NUM_LEDS)])
51+
52+
@property
53+
def brightness(self)->float:
54+
return self.__brightness
55+
56+
@brightness.setter
57+
def brightness(self, value:float):
58+
if (value <=1) and (value >=0):
59+
self.__brightness = value
60+
print(f'brightness: {self.__brightness}')
61+
self.show()
62+
63+
def show(self):
64+
dimmer_ar = array.array("I", [0 for _ in range(self.NUM_LEDS)])
65+
for i,c in enumerate(self.ar):
66+
r = int(((c >> 8) & 0xFF) * self.__brightness)
67+
g = int(((c >> 16) & 0xFF) * self.__brightness)
68+
b = int((c & 0xFF) * self.__brightness)
69+
dimmer_ar[i] = (g<<16) + (r<<8) + b
70+
self.sm.put(dimmer_ar, 8)
71+
# time.sleep_ms(10)
72+
73+
def set_rgb2(self, i, r,b,g):
74+
self.ar[i] = (g<<16) + (r<<8) + b
75+
self.show()
76+
77+
def fill(self, r,g,b):
78+
for i in range(len(self.ar)):
79+
self.set_rgb2(i, r,g,b)
80+
self.show()
81+
82+
def rgb2hsv(self, r:int, g:int, b:int):
83+
h = 0
84+
s = 0
85+
v = 0
86+
# constrain the values to the range 0 to 1
87+
r_normal, g_normal, b_normal, = r / 255, g / 255, b / 255
88+
cmax = max(r_normal, g_normal, b_normal)
89+
cmin = min(r_normal, g_normal, b_normal)
90+
delta = cmax - cmin
91+
92+
# Hue calculation
93+
if(delta ==0):
94+
h = 0
95+
elif (cmax == r_normal):
96+
h = (60 * (((g_normal - b_normal) / delta) % 6))
97+
elif (cmax == g_normal):
98+
h = (60 * (((b_normal - r_normal) / delta) + 2))
99+
elif (cmax == b_normal):
100+
h = (60 * (((r_normal - g_normal) / delta) + 4))
101+
102+
# Saturation calculation
103+
if cmax== 0:
104+
s = 0
105+
else:
106+
s = delta / cmax
107+
108+
# Value calculation
109+
v = cmax
110+
111+
# print(f"normals are: {r_normal}, {g_normal}, {b_normal}, cmax is {cmax}, delta is {delta}")
112+
# print(f"h:{h}, s:{s}, v:{v}")
113+
return h, s, v
114+
115+
def set_rgb(self, index:int, red:int, green:int, blue:int):
116+
dimmer_ar = array.array("I", [0 for _ in range(self.NUM_LEDS)])
117+
for i,c in enumerate(self.ar):
118+
r = int(((c >> 8) & 0xFF) * self.__brightness)
119+
g = int(((c >> 16) & 0xFF) * self.__brightness)
120+
b = int((c & 0xFF) * self.__brightness)
121+
dimmer_ar[i] = (g<<16) + (r<<8) + b
122+
self.sm.put(dimmer_ar, 8)
123+
# time.sleep_ms(10)
124+
self.show()
125+
126+
def set_hsv(self, index, hue, sat, val):
127+
r,g,b = self.hsv2rgb(hue, sat,val)
128+
# print(f'r:{r}, g:{g}, b:{b}, hue:{hue}, sat:{sat}, val:{val}')
129+
self.set_rgb2(index, r, g, b)
130+
self.show()
131+
132+
def hsv2rgb(self, hue, sat, val):
133+
""" Sets the Hue Saturation and Value of the indexed RGB LED"""
134+
135+
i = math.floor(hue * 6)
136+
f = hue * 6 - i
137+
p = val * (1 - sat)
138+
q = val * (1 - f * sat)
139+
t = val * (1 - (1 - f) * sat)
140+
141+
r, g, b = [
142+
(val, t, p),
143+
(q, val, p),
144+
(p, val, t),
145+
(p, q, val),
146+
(t, p, val),
147+
(val, p, q),
148+
][int(i % 6)]
149+
r = int(r*255)
150+
g = int(g*255)
151+
b = int(b*255)
152+
153+
return r, g, b
154+
155+
def cycle(self):
156+
""" Cycle through all the colours """
157+
# pass
158+
for i in range (0, 100, 1):
159+
for j in range (self.NUM_LEDS):
160+
self.set_hsv(j,i/100,1,1)
161+
sleep(0.0001)
162+
def spin(self, loops=None):
163+
if not loops:
164+
loops = 10
165+
for loop in range(0,loops):
166+
for i in range(0,self.NUM_LEDS):
167+
if i == self.NUM_LEDS:
168+
self.set_hsv(i-1,0,0,0)
169+
else:
170+
print(f'i is {i}')
171+
self.set_rgb2(i,255,0,0)
172+
if i > 0:
173+
self.set_hsv(i-1,1,1,0)
174+
175+
print(f'i:{i}')
176+
177+
delay = 1/ self.NUM_LEDS
178+
print(f'delay:{delay}')
179+
sleep(delay)
180+
181+
self.set_rgb2(11,0,0,0)
182+
183+
def rainbow_chaser(self, loops=None):
184+
if not loops:
185+
loops = 10
186+
187+
# loop through the colors
188+
for loop in range(loops):
189+
for color in range(0,10,1):
190+
for led in range(self.NUM_LEDS):
191+
col = float(color / 10)
192+
self.set_hsv(led, col, 1, 1)
193+
print(f'color: {color}, col: {col}')
194+
sleep(0.01)
195+
196+
def disable_all(self):
197+
for led in range(self.NUM_LEDS):
198+
self.set_hsv(led, 0, 0, 0)
199+
200+
def full_beam(self):
201+
for led in range(self.NUM_LEDS):
202+
self.set_hsv(led, 1, 0, 1)
203+
204+
def off(self):
205+
self.disable_all()
206+
207+
def flash(self, loop):
208+
for loops in range(loop):
209+
for led in range(self.NUM_LEDS):
210+
self.set_hsv(led, 1, 0, 1)
211+
sleep(0.5)
212+
self.off()
213+
sleep(0.5)
214+
215+
class Bubo_Eyes():
216+
217+
led_strip = ws2812()
218+
219+
def __init__(self):
220+
self.led_strip.set_rgb(0,255,0,0)
221+
self.led_strip.show()
222+
self.led_strip.fill(0,0,0)
223+
# self.pulse()
224+
225+
def pulse(self):
226+
for i in range(-1,100,1):
227+
self.led_strip.brightness = i / 100
228+
# self.led_strip.show()
229+
sleep(0.0001)
230+
for i in range(100,-1,-1):
231+
self.led_strip.brightness = i / 100
232+
# self.led_strip.show()
233+
sleep(0.0001)
234+
235+
def glow(self, r,g,b):
236+
for led in range(self.led_strip.NUM_LEDS):
237+
self.led_strip.set_rgb2(led, r, g, b)
238+
239+
def off(self):
240+
self.led_strip.off()
241+
242+
bubo = Bubo_Eyes()
243+
244+
wait = 0.001
245+
while True:
246+
try:
247+
for n in range (1,50):
248+
bubo.glow(0,0,255)
249+
bubo.led_strip.brightness = n/100
250+
sleep(wait)
251+
for n in range(50,1,-1):
252+
bubo.glow(0,0,255)
253+
bubo.led_strip.brightness = n/100
254+
sleep(wait)
255+
#sleep(1)
256+
bubo.led_strip.spin(1)
257+
bubo.led_strip.rainbow_chaser(2)
258+
sleep(1)
259+
bubo.led_strip.full_beam()
260+
sleep(10)
261+
bubo.led_strip.disable_all()
262+
finally:
263+
bubo.off()
264+

0 commit comments

Comments
 (0)