Files @ 6e77747319ab
Branch filter:

Location: led-matrix-software/lights.py

matthewreed
Added base software to select and run demos/games, along with a couple demos
#!/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())