-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.py
executable file
·73 lines (62 loc) · 2.01 KB
/
app.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
#!/usr/bin/env python3
import time
from datetime import datetime
from gpiozero import Button
import clock
import menu
import status
try:
from hardware import Hardware
except Exception:
from virtual import Hardware
class App:
def __init__(self):
self.now = 0
self.demo_now = 0
self.event_queue = []
self.hw = Hardware()
self.hw.enter_button.when_pressed = self.enter_button_pressed
self.hw.up_button.when_pressed = self.up_button_pressed
self.hw.down_button.when_pressed = self.down_button_pressed
self.hw.exit_button.when_pressed = self.exit_button_pressed
self.dmd = self.hw.dmd
self.modes = {
'clock': clock.Mode(self.dmd),
'menu': menu.Mode(self.dmd),
'clock-select': menu.ClockSelectMode(self.dmd),
'status': status.Mode(self.dmd),
}
self.mode = 'clock'
self.dmd.brightness = 0.5
self.dmd.rotation = 180
self.modes[self.mode].start()
self.dmd.show()
def enter_button_pressed(self):
self.event_queue.insert(0, 'enter')
def up_button_pressed(self):
self.event_queue.insert(0, 'up')
def down_button_pressed(self):
self.event_queue.insert(0, 'down')
def exit_button_pressed(self):
self.event_queue.insert(0, 'exit')
def loop(self):
next_mode = self.modes[self.mode].service(self.event_queue)
if next_mode is not None:
next_mode_name = next_mode['mode']
self.modes[self.mode].stop()
kwargs = dict(next_mode)
del kwargs['mode']
self.modes[next_mode_name].start(**kwargs)
self.mode = next_mode_name
self.dmd.show()
self.hw.service()
def run(self):
interval = 1/60
while True:
self.now = time.time()
self.loop()
remaining = interval - (time.time() - self.now)
if remaining > 0:
time.sleep(remaining)
app = App()
app.run()