|
@@ -0,0 +1,76 @@
|
|
|
+#!/usr/bin/env python
|
|
|
+import time
|
|
|
+from datetime import datetime
|
|
|
+
|
|
|
+from luma.led_matrix.device import max7219
|
|
|
+from luma.core.interface.serial import spi, noop
|
|
|
+from luma.core.render import canvas
|
|
|
+from luma.core.legacy import text, show_message
|
|
|
+from luma.core.legacy.font import proportional, CP437_FONT, TINY_FONT
|
|
|
+
|
|
|
+jours = ["Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"]
|
|
|
+mois = ["Janvier", u"Février", "Mars", "Avril", "Mai", "Juin", "Juillet", u"Août", "Septembtre", "Octobre"]
|
|
|
+
|
|
|
+def minute_change(device):
|
|
|
+ '''When we reach a minute change, animate it.'''
|
|
|
+ hours = datetime.now().strftime('%H')
|
|
|
+ minutes = datetime.now().strftime('%M')
|
|
|
+
|
|
|
+ def helper(current_y):
|
|
|
+ with canvas(device) as draw:
|
|
|
+ text(draw, (0, 1), hours, fill="white", font=proportional(CP437_FONT))
|
|
|
+ text(draw, (15, 1), ":", fill="white", font=proportional(TINY_FONT))
|
|
|
+ text(draw, (17, current_y), minutes, fill="white", font=proportional(CP437_FONT))
|
|
|
+ time.sleep(0.1)
|
|
|
+ for current_y in range(1, 9):
|
|
|
+ helper(current_y)
|
|
|
+ minutes = datetime.now().strftime('%M')
|
|
|
+ for current_y in range(9, 1, -1):
|
|
|
+ helper(current_y)
|
|
|
+
|
|
|
+
|
|
|
+def animation(device, from_y, to_y):
|
|
|
+ '''Animate the whole thing, moving it into/out of the abyss.'''
|
|
|
+ hourstime = datetime.now().strftime('%H')
|
|
|
+ mintime = datetime.now().strftime('%M')
|
|
|
+ current_y = from_y
|
|
|
+ while current_y != to_y:
|
|
|
+ with canvas(device) as draw:
|
|
|
+ text(draw, (0, current_y), hourstime, fill="white", font=proportional(CP437_FONT))
|
|
|
+ text(draw, (15, current_y), ":", fill="white", font=proportional(TINY_FONT))
|
|
|
+ text(draw, (17, current_y), mintime, fill="white", font=proportional(CP437_FONT))
|
|
|
+ time.sleep(0.1)
|
|
|
+ current_y += 1 if to_y > from_y else -1
|
|
|
+
|
|
|
+
|
|
|
+def main():
|
|
|
+ # Setup for Banggood version of 4 x 8x8 LED Matrix (https://bit.ly/2Gywazb)
|
|
|
+ serial = spi(port=0, device=0, gpio=noop())
|
|
|
+ device = max7219(serial, cascaded=4, block_orientation=-90, blocks_arranged_in_reverse_order=False)
|
|
|
+ device.contrast(16)
|
|
|
+
|
|
|
+ # The time ascends from the abyss...
|
|
|
+ animation(device, 8, 1)
|
|
|
+
|
|
|
+ toggle = False # Toggle the second indicator every second
|
|
|
+ while True:
|
|
|
+ toggle = not toggle
|
|
|
+ sec = datetime.now().second
|
|
|
+ if sec == 59:
|
|
|
+ # When we change minutes, animate the minute change
|
|
|
+ minute_change(device)
|
|
|
+ else:
|
|
|
+ # Do the following twice a second (so the seconds' indicator blips).
|
|
|
+ # I'd optimize if I had to - but what's the point?
|
|
|
+ # Even my Raspberry PI2 can do this at 4% of a single one of the 4 cores!
|
|
|
+ hours = datetime.now().strftime('%H')
|
|
|
+ minutes = datetime.now().strftime('%M')
|
|
|
+ with canvas(device) as draw:
|
|
|
+ text(draw, (0, 1), hours, fill="white", font=proportional(CP437_FONT))
|
|
|
+ text(draw, (15, 1), ":" if toggle else " ", fill="white", font=proportional(TINY_FONT))
|
|
|
+ text(draw, (17, 1), minutes, fill="white", font=proportional(CP437_FONT))
|
|
|
+ time.sleep(0.5)
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == "__main__":
|
|
|
+ main()
|