Files
@ 835bac5d3b3c
Branch filter:
Location: led-matrix-software/lights.py
835bac5d3b3c
3.2 KiB
text/x-python
Added new demos and handle splash screens and controller input
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 113 114 | #!/usr/bin/python
### lights.py
### Author: Matthew Reed
import sys
import time
import signal
import logging
import threading
import configparser
from enum import Enum
import opc
import color_utils
import math
import matrix
import controller
from demos import *
class Lights:
def __init__(self, config):
self.logger = logging.getLogger('lights.lights')
self.config = config
self.matrix = matrix.Matrix(config)
self.controller = controller.Controller(config)
self.demo_i = 0
self.demos = [
rainbow.Rainbow(self.config, self, self.matrix, self.controller),
paint.Paint(self.config, self, self.matrix, self.controller),
snake.Snake(self.config, self, self.matrix, self.controller),
pong.Pong(self.config, self, self.matrix, self.controller),
tetris.Tetris(self.config, self, self.matrix, self.controller),
clouds.Clouds(self.config, self, self.matrix, self.controller),
]
def reset(self):
self.color = matrix.Colors.WHITE.value
self.matrix.set_matrix(matrix.Colors.OFF.value)
def run(self):
self.reset()
#start timers and counters
self.start_time = time.time()
last_time = time.time()
led_iteration_count = 0
frame_count = 0
self.demos[self.demo_i].run()
while True:
for event in self.controller.read_input():
#print("Event: " + str(event))
if event.code == 312 and event.value == 1:
self.demo_i = (self.demo_i + 1) % len(self.demos)
self.reset()
elif event.code == 313 and event.value == 1:
self.reset()
self.demos[self.demo_i].run()
if time.time() > last_time + 0.1:
last_time = time.time()
self.demos[self.demo_i].splash()
led_iteration_count = (led_iteration_count + 1) % self.matrix.NUM_LEDS
frame_count = frame_count + 1
time.sleep(0.01)
def stop(self):
self.matrix.stop()
def main():
logger = logging.getLogger('lights')
logger.setLevel(logging.DEBUG)
# create file handler which logs debug messages
sh1 = logging.StreamHandler(sys.stdout)
sh1.setLevel(logging.DEBUG)
# create formatter and add it to the handlers
formatter = logging.Formatter('[%(asctime)s][%(levelname)s][%(module)s][%(funcName)s] %(message)s')
sh1.setFormatter(formatter)
# add the handlers to the logger
logger.addHandler(sh1)
logger.info('Logger initialized')
config = configparser.ConfigParser()
config.read('lights.conf')
try:
my_lights = Lights(config)
logger.info('Starting...')
my_lights.run()
finally:
logger.info('Shutting down')
my_lights.stop()
logger.info('Goodbye')
if __name__ == "__main__":
sys.exit(main())
|