diff --git a/lights.py b/lights.py new file mode 100644 --- /dev/null +++ b/lights.py @@ -0,0 +1,109 @@ +#!/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 = [ + paint.Paint(self.config, self, self.matrix, self.controller), + rainbow.Rainbow(self.config, self, self.matrix, self.controller), + snake.Snake(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 + + 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()) \ No newline at end of file