Ejemplo n.º 1
0
def main(screen, interval):

    # master parameters, used in rendering and updated by playlist advancer thread
    masterParams = EffectParameters()

    # if we got a curses screen, use it for button emulation through the keyboard
    if screen:
        # re-open stdout with a buffer size of 0. this makes print commands work again.
        sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
        screen.clear()
        screen.refresh()

        # put keyboard state into effect parameters
        keymonitor = KeyboardMonitorThread(masterParams, screen)
        keymonitor.start()

    else:
        ButtonMonitorThread(masterParams).start()

    model = SomaModel()  #address_filename="../addresses.txt")

    # a playlist. each entry in a playlist can contain one or more effect layers
    # (if more than one, they are all rendered into the same frame...mixing method
    # is determined by individual effect layers' render implementations)
    playlist = Playlist([

        # This is a very handy layer for debugging.  Steps through LEDs in
        # order of frame index in response to a button push, printing the
        # address of the lit LED.
        #[ControlledAddressTestLayer()],

        #[TriangleWaveLayer()],
        [
            PhotoColorsLayer(model),
            DimBrightButtonLayer(),
            SpeckLayer(button=0),
            SpeckLayer(button=1),
            Lightning(),
            Repair(),
        ],
        [
            MultiplierLayer(ColorWave(model, grayscale=True),
                            ColorWiper(model)),
            Lightning(),
            Repair(),
        ],
        [
            RandomPhaseLayer(model),
            ColorCycleLayer(0.00003, 0.0001),
            Lightning(),
            Repair(),
        ],

        #[
        #   ColorPaletteBattleLayer(model),
        #   Repair(),
        #],
        [
            MorseLayer2([
                "figure", "action", "light", "yang", "synergy",
                "unity in dual", "SOMA"
            ], [
                "ground", "intention", "darkness", "yin", "discord",
                "order from chaos", "FLG"
            ]),
            ColorCycleLayer(0.0003, 0.0005),
            Lightning(),
            Repair(),
        ],
    ])

    # the renderer manages a playlist (or dict of multiple playlists), as well as transitions
    # and gamma correction
    renderer = Renderer(playlists={'all': playlist}, gamma=2.2)

    # the controller manages the animation loop - creates frames, calls into the renderer
    # at appropriate intervals, updates the time stored in master params, and sends frames
    # out over OPC
    controller = AnimationController(model, renderer, masterParams)

    # a thread that periodically advances the active playlist within the renderer.
    # TODO: example to demonstrate swapping between multiple playlists with custom fades

    advancer = PlaylistAdvanceThread(renderer, switchInterval=interval)
    advancer.start()

    # go!
    controller.drawingLoop()
Ejemplo n.º 2
0
def main(screen):

    # master parameters, used in rendering and updated by playlist advancer thread
    masterParams = EffectParameters()

    # if we got a curses screen, use it for button emulation through the keyboard
    if screen:
        # re-open stdout with a buffer size of 0. this makes print commands work again.
        sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
        screen.clear()
        screen.refresh()

        # put keyboard state into effect parameters
        keymonitor = KeyboardMonitorThread(masterParams, screen)
        keymonitor.start()

    # model = SomaModel('../../cad/SomaPointParsing/input_points.json')
    model = SomaModel()

    # a playlist. each entry in a playlist can contain one or more effect layers
    # (if more than one, they are all rendered into the same frame...mixing method
    # is determined by individual effect layers' render implementations)
    playlist = Playlist([
        # [
        #    RandomPhaseLayer(model),
        #    ColorCycleLayer()
        # ],
        # [
        #    ColorPaletteBattleLayer(model)
        # ],
        [
            HolidayColorWiper(model,
                              colors=[(204, 31, 31), (36, 143, 0),
                                      (255, 255, 255)],
                              timer=3)
        ],
        # [
        #PhotoColorsLayer(model),
        # InvertColorsLayer(),
        #InvertColorByRegionLayer(model),
        # ],
        # [
        #     SineWaveLayer(color = (0.2, 0.5, 1)),
        #     # SomaTestLayer(),
        #     # ColorBlinkyLayer(),
        # ],
        # [
        #     PhotoColorsLayer(model),
        #     DimBrightButtonLayer(),

        #     # ColorWave(model),
        #     SpeckLayer(button=0),
        #     SpeckLayer(button=1),

        #     #PhotoColorsLayer(model),
        #     #DimBrightButtonLayer()
        #     #AddressTestLayer(),
        #     #TestPatternLayer(),
        #     #ColorWave(model),
        #     # ColorWiper(model),
        #      # MultiplierLayer(ColorWave(model), ColorWiper(model)),
        # ],
        # [
        # FireflySwarmLayer(),
        # ButtonTestLayer()
        # RandomPhaseLayer(model)
        # MultiplierLayer(AxonChaseLayer(),ColorWave(model))
        # AxonChaseLayer(segments=['all'])
        # ColorWave(model),
        #    ColorWave(model),
        # AxonChaseLayer()
        # ],
        # [
        # AxonChaseLayer(color=(0,1,0), trigger_threshold=0.2, cycle_time=1.5),
        # AxonChaseLayer(color=(0,0,1), trigger_threshold=0.1, cycle_time=1.5),
        # ],
    ])

    # the renderer manages a playlist (or dict of multiple playlists), as well as transitions
    # and gamma correction
    renderer = Renderer(playlists={'all': playlist}, gamma=2.2)

    # the controller manages the animation loop - creates frames, calls into the renderer
    # at appropriate intervals, updates the time stored in master params, and sends frames
    # out over OPC
    controller = AnimationController(model, renderer, masterParams)

    # a thread that periodically advances the active playlist within the renderer.
    # TODO: example to demonstrate swapping between multiple playlists with custom fades
    advancer = PlaylistAdvanceThread(renderer, switchInterval=10)
    advancer.start()

    # go!
    controller.drawingLoop()