#!/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())