Files
@ 6e77747319ab
Branch filter:
Location: led-matrix-software/lights.py - annotation
6e77747319ab
3.0 KiB
text/x-python
Added base software to select and run demos/games, along with a couple demos
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 | 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab 6e77747319ab | #!/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())
|