Commit 4b491a3d authored by schneider's avatar schneider
Browse files

feat(preload): add preload directory with files which go directly to new card10s

parent 8d689f8e
# Adapted from https://github.com/muccc/flipdots/blob/master/scripts/clock.py
import display
from utime import sleep
import utime
import math
import leds
class Time:
def __init__(self, start = 0):
self.time = start
self.wait_time = 0.95
def tick(self):
sleep(self.wait_time)
self.time += 1
@property
def second(self):
return self.time % 60
@property
def minute(self):
return (self.time / 60) % 60
@property
def hour(self):
return (self.time / 3600) % 24
class Clock:
def __init__(self, sizex = 80, sizey = 80, radius = 38, offsetx = 30,
hour_hand = True, minute_hand = True, second_hand = True, console_out = False,
run_once = False, update_interval = 0):
self.sizex = sizex
self.sizey = sizey
self.radius = radius
self.center = (int(self.sizex/2), int(self.sizey/2))
self.hour_hand = hour_hand
self.minute_hand = minute_hand
self.second_hand = second_hand
self.console_out = console_out
self.update_interval = update_interval if update_interval != 0 else (1 if self.second_hand else 30)
self.run_once = run_once
self.offsetx = offsetx
self.time = Time()
white = (255, 255, 255)
self.center_col = white
self.m1_col = white
self.m5_col = white
self.hour_hand_col = white
self.minute_hand_col = white
self.second_hand_col = white
def loop(self):
colored = False
try:
with display.open() as disp:
while True:
self.updateClock(disp)
if self.run_once:
break
except KeyboardInterrupt:
for i in range(11):
leds.set(i, (0, 0, 0))
return
def drawImage(self, image):
with display.open() as d:
d.clear()
for x in range(len(image)):
for y in range(len(image[x])):
d.pixel(x + self.offsetx, y, col = (255, 255, 255) if image[x][y] else (0, 0, 0))
d.update()
def updateClock(self, disp):
disp.clear()
localtime = utime.localtime()
disp.pixel(self.center[0] + self.offsetx, self.center[1], col = self.center_col)
hour_coords = self.circlePoint(math.radians((((localtime[3]%12)/12.) if localtime[3] else 0)*360 + 270 + (localtime[4]/2)))
minute_coords = self.circlePoint(math.radians(localtime[4]*6+270))
second_coords = self.circlePoint(math.radians(localtime[5]*6+270))
for i in range(60):
degree = i*6 + 90
radian = - math.radians(degree)
coords = self.circlePoint(radian)
if not i % 5:
self.addLine(disp, coords, self.center, 3, 1, col = self.m5_col)
else:
self.addLine(disp, coords, self.center, 1, col = self.m1_col)
if self.hour_hand:
self.addLine(disp, self.center, hour_coords, int(self.radius / 3), 1, col = self.hour_hand_col)
if self.minute_hand:
self.addLine(disp, self.center, minute_coords, int(self.radius / 2), col = self.minute_hand_col)
if self.second_hand:
self.addLine(disp, self.center, second_coords, self.radius - int(self.radius/8.), col = self.second_hand_col)
if self.console_out:
for y in range(self.radius*2):
line = ""
for x in range(self.radius*2):
line = line + ("." if image[(self.center[1]-self.radius)+y][(self.center[0]-self.radius)+x] else " ")
print(line)
disp.update()
def circlePoint(self, t):
return (int(round(self.radius*math.cos(t))) + self.center[0], int(round(self.radius*math.sin(t))) + self.center[1])
def addLine(self, disp, source, aim, length, thickness = 1, col = (255, 255, 255)):
vector = self.subVector(aim, source)
vector = self.normVector(vector)
destination = self.addVector(source, self.multiplyVector(vector, length))
disp.line(round(source[0]) + self.offsetx, round(source[1]), round(destination[0]) + self.offsetx, round(destination[1]), col=col, size=thickness)
def normVector(self, v):
length = math.sqrt(sum([i**2 for i in v]))
new_v = []
for i in range(len(v)):
new_v.append(v[i]/length)
return tuple(new_v)
def subVector(self, v1, v2):
res = []
for i in range(len(v1)):
res.append(v1[i]-v2[i])
return tuple(res)
def addVector(self, v1, v2):
res = []
for i in range(len(v1)):
res.append(v1[i]+v2[i])
return tuple(res)
def multiplyVector(self, v, multiplier):
return tuple([i*multiplier for i in v])
clock = Clock()
clock.loop()
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment