From 4b491a3dfe88b7f738ac4cb2cb55013e80f1acdb Mon Sep 17 00:00:00 2001
From: schneider <schneider@blinkenlichts.net>
Date: Fri, 16 Aug 2019 22:16:25 +0200
Subject: [PATCH] feat(preload): add preload directory with files which go
 directly to new card10s

---
 preload/main.py | 142 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 142 insertions(+)
 create mode 100644 preload/main.py

diff --git a/preload/main.py b/preload/main.py
new file mode 100644
index 000000000..1c2714c09
--- /dev/null
+++ b/preload/main.py
@@ -0,0 +1,142 @@
+# 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()
-- 
GitLab