-
Notifications
You must be signed in to change notification settings - Fork 3
/
led_cube.py
153 lines (121 loc) · 5.35 KB
/
led_cube.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
"""--------IMPORT MODULES AND PATTERNS--------"""
import traceback
from core import *
from patterns.plot import *
from patterns.geometric import *
from patterns.plane import *
from patterns.points import *
from patterns.rainy import *
from patterns.sine import *
from patterns.transitions import *
from math import sin, sqrt
from time import sleep
"""-----------------SEQUENCES----------------"""
#run a series of patterns a specified number of times
#if the number of times is more than 9999 then the sequence will run forever
#create sequences by passing a list of sublists, where each sublist contains
# the information for one pattern: name, parameter, and number of repetitions
#if the pattern does not require a parameter, pass "N" to not use one
#sequence 1 is the main function showcase
sequence1 = Sequence([[voxelRand, "N", 175],
[transition, "start-xbounce", 1],
[bounce, "x", 5],
[transition, "xbounce-xname", 1],
[transition, "xname-xbounce", 1],
[transition, "xbounce-ybounce", 1],
[bounce, "y", 5],
[sinewave, "worm", 5],
[sinewave, "sine", 5],
[sinewave, "bounce", 5],
[transition, "ybounce-xspin", 1],
[spin, "x", 10],
[transition, "xspin-ybounce", 1],
[transition, "ybounce-rain", 1],
[rain, "snow", 64],
[transition, "ybounce-zbounce", 1],
[bounce, "z", 5],
[transition, "zbounce-woopwoop", 1],
[woopwoop, "N", 20],
[transition, "woopwoop-zbounce", 1],
[transition, "zbounce-xbounce", 1],
[transition, "xbounce-ybounce", 1],
[voxelSend, "N", 50],
[transition, "ybounce-xbounce", 1],
[bounce, "x", 5],
[transition, "xbounce-yspin", 1],
[spin, "y", 10],
[transition, "yspin-xbounce", 1],
[transition, "xbounce-end", 1]])
#sequence 2 is a sinewave show-off
sequence2 = Sequence([[transition, "start-xbounce", 1],
[transition, "xbounce-ybounce", 1],
[sinewave, "worm", 5],
[sinewave, "sine", 5],
[sinewave, "bounce", 5],
[voxelRand, "N", 175]])
#sequence 3 is a spiral show-off
sequence3 = Sequence([[transition, "start-xbounce", 1],
[bounce, "x", 5],
[transition, "xbounce-spiral", 1],
[spiral, "N", 6],
[transition, "spiral-xbounce", 1],
[bounce, "x", 5],
[transition, "xbounce-end", 1]])
"""---------------MAIN FUNCTION----------------"""
try:
#setup multiplexer and shift registers
multiplexer = Multiplexer()
#clear the shift registers
multiplexer.register1.clear()
multiplexer.register2.clear()
#wait for ENTER to be pressed
print " "
print "Connect the LED cube to the Raspberry Pi now."
raw_input("When you are ready, press ENTER to begin.")
print " "
sleep(0.25)
#start multiplexing thread
print("Starting multiplexer thread...")
multiplexerThread=threading.Thread(target=multiplexer.multiplex,args=(15,))
multiplexerThread.daemon=True
multiplexerThread.start()
#run through sequences
print "Running..."
"""-----PUT YOUR PATTERNS TO BE RUN INSIDE THIS BLOCK-----"""
sequence2.run(1, 0.075)
sleep(2)
sequence3.run(1, 0.075)
sleep(2)
sequence1.run(1, 0.075)
"""-----PUT YOUR PATTERNS TO BE RUN INSIDE THIS BLOCK-----"""
#clear transistors and shift registers
print "Cleaning up resources..."
for transistor in transistors:
GPIO.output(transistor, 0)
multiplexer.register1.clear()
multiplexer.register2.clear()
print "Done."
#multiplexer.running = False
GPIO.cleanup()
except KeyboardInterrupt:
#clear transistors and shift registers
print "\nCleaning up resources..."
for transistor in transistors:
GPIO.output(transistor, 0)
multiplexer.register1.clear()
multiplexer.register2.clear()
print "Quitting due to KeyboardInterrupt (CTRL-C)."
#multiplexer.running = False
GPIO.cleanup()
except:
#print error message and stack trace
print("Quitting due to exception, stack trace is as follows: ")
traceback.print_exc()
#clear transistors and shift registers
for transistor in transistors:
GPIO.output(transistor, 0)
multiplexer.register1.clear()
multiplexer.register2.clear()
#multiplexer.running = False
raw_input("\nPress ENTER to quit.")
GPIO.cleanup()