-
Notifications
You must be signed in to change notification settings - Fork 0
/
__init__.py
112 lines (95 loc) · 3.47 KB
/
__init__.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
import display
import time
import version
import neopixel
import buttons
import utime
import machine
import wifi
import system
# TODO: Turn hands from CCW to CW: Done
# TODO: Button Press for Reconnect:
# TODO: Button Press for Resync:
# TODO: dimmer: maybe done
neopixel.enable()
def display_connecting():
display.drawFill(0x000000)
display.drawText(0, 0, "Connecting...", 0xFFFFFF, "7x5")
display.flush()
def display_connected(additional_info=[]):
display.drawFill(0x000000)
display.drawText(0, 0, "Connected!", 0xFFFFFF, "7x5")
for i, info in enumerate(additional_info):
display.drawText(0, 8*(i+1), info, 0xFFFFFF, "7x5")
display.flush()
def reconnect(pressed):
if pressed:
wifi.disconnect()
display_connecting()
wifi.connect()
display_connected()
class clock:
def __init__(self):
self.running = True
self.dimmer = 2
self.rtc = machine.RTC()
display_connecting()
wifi.connect()
if not wifi.wait():
system.launcher()
if wifi.status():
display_connected(["Dimmer: %d (lf,rt)" % self.dimmer])
self.sync_ntp(True)
self.is_initialized = True
else:
ledData = [0x00, 0x00, 0x00, 0x00, 0x79, 0x00]*6
neopixel.send(bytes(ledData))
system.launcher()
def sync_ntp(self, pressed):
if pressed:
self.rtc = machine.RTC()
self.rtc.ntp_sync("pool.ntp.org")
def ledProc(self):
if self.is_initialized:
ledState = 0
ledData = [0x00, 0x00, 0x00]*12
while True:
for i in range(len(ledData)):
if ledData[i] > 64:
ledData[i] -= 64
else:
ledData[i] = 0
time_full = self.rtc.now()
hours = int(time_full[3]) % 12
minutes = int(time_full[4] / 5)
seconds = int(time_full[5] / 5)
if self.running:
for i in range(12):
# blue = 0xff if seconds // 5 == i else 0
# green = 0xff if minutes // 5 == i else 0
# red = 0xff if hours % 12 == i else 0
green = 0xff if i == (11 - minutes) else 0x00
blue = 0xff if i == (11 - seconds) else 0x00
red = 0xff if i == (11 - hours) else 0x00
ledData[3*i] = green >> self.dimmer
ledData[3*i+1] = red >> self.dimmer
ledData[3*i+2] = blue >> self.dimmer
neopixel.send(bytes(ledData))
ledState = ledState + 1
if ledState > 254:
ledState = 0
time.sleep_ms(20)
def light_intensity_up(self, pressed):
if pressed:
self.dimmer = max(0, self.dimmer - 1)
display_connected(["Dimmer: %d (lf,rt)" % self.dimmer])
def light_intensity_down(self, pressed):
if pressed:
self.dimmer = min(7, self.dimmer + 1)
display_connected(["Dimmer: %d (lf,rt)" % self.dimmer])
a = clock()
buttons.attach(buttons.BTN_LEFT, a.light_intensity_down)
buttons.attach(buttons.BTN_RIGHT, a.light_intensity_up)
buttons.attach(buttons.BTN_UP, reconnect)
buttons.attach(buttons.BTN_DOWN, a.sync_ntp)
a.ledProc()