From 91b46ae2b08501f9824c13c2ae6986087c75b409 Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 23 Feb 2023 13:26:12 +0800 Subject: [PATCH] Add files via upload --- pulsing-brightness.py | 36 +++++++++++++++++++ pulsing-colors.py | 42 ++++++++++++++++++++++ samplebase.py | 81 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 159 insertions(+) create mode 100644 pulsing-brightness.py create mode 100644 pulsing-colors.py create mode 100644 samplebase.py diff --git a/pulsing-brightness.py b/pulsing-brightness.py new file mode 100644 index 0000000..e927c35 --- /dev/null +++ b/pulsing-brightness.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python +from samplebase import SampleBase + + +class GrayscaleBlock(SampleBase): + def __init__(self, *args, **kwargs): + super(GrayscaleBlock, self).__init__(*args, **kwargs) + + def run(self): + max_brightness = self.matrix.brightness + count = 0 + c = 255 + + while (True): + if self.matrix.brightness < 1: + self.matrix.brightness = max_brightness + count += 1 + else: + self.matrix.brightness -= 1 + + if count % 4 == 0: + self.matrix.Fill(c, 0, 0) + elif count % 4 == 1: + self.matrix.Fill(0, c, 0) + elif count % 4 == 2: + self.matrix.Fill(0, 0, c) + elif count % 4 == 3: + self.matrix.Fill(c, c, c) + + self.usleep(20 * 1000) + +# Main function +if __name__ == "__main__": + grayscale_block = GrayscaleBlock() + if (not grayscale_block.process()): + grayscale_block.print_help() diff --git a/pulsing-colors.py b/pulsing-colors.py new file mode 100644 index 0000000..c585174 --- /dev/null +++ b/pulsing-colors.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python +from samplebase import SampleBase + + +class PulsingColors(SampleBase): + def __init__(self, *args, **kwargs): + super(PulsingColors, self).__init__(*args, **kwargs) + + def run(self): + self.offscreen_canvas = self.matrix.CreateFrameCanvas() + continuum = 0 + + while True: + self.usleep(5 * 1000) + continuum += 1 + continuum %= 3 * 255 + + red = 0 + green = 0 + blue = 0 + + if continuum <= 255: + c = continuum + blue = 255 - c + red = c + elif continuum > 255 and continuum <= 511: + c = continuum - 256 + red = 255 - c + green = c + else: + c = continuum - 512 + green = 255 - c + blue = c + + self.offscreen_canvas.Fill(red, green, blue) + self.offscreen_canvas = self.matrix.SwapOnVSync(self.offscreen_canvas) + +# Main function +if __name__ == "__main__": + pulsing_colors = PulsingColors() + if (not pulsing_colors.process()): + pulsing_colors.print_help() diff --git a/samplebase.py b/samplebase.py new file mode 100644 index 0000000..85f0516 --- /dev/null +++ b/samplebase.py @@ -0,0 +1,81 @@ +import argparse +import time +import sys +import os + +sys.path.append(os.path.abspath(os.path.dirname(__file__) + '/..')) +from rgbmatrix import RGBMatrix, RGBMatrixOptions + + +class SampleBase(object): + def __init__(self, *args, **kwargs): + self.parser = argparse.ArgumentParser() + + self.parser.add_argument("-r", "--led-rows", action="store", help="Display rows. 16 for 16x32, 32 for 32x32. Default: 32", default=32, type=int) + self.parser.add_argument("--led-cols", action="store", help="Panel columns. Typically 32 or 64. (Default: 32)", default=32, type=int) + self.parser.add_argument("-c", "--led-chain", action="store", help="Daisy-chained boards. Default: 1.", default=1, type=int) + self.parser.add_argument("-P", "--led-parallel", action="store", help="For Plus-models or RPi2: parallel chains. 1..3. Default: 1", default=1, type=int) + self.parser.add_argument("-p", "--led-pwm-bits", action="store", help="Bits used for PWM. Something between 1..11. Default: 11", default=11, type=int) + self.parser.add_argument("-b", "--led-brightness", action="store", help="Sets brightness level. Default: 100. Range: 1..100", default=100, type=int) + self.parser.add_argument("-m", "--led-gpio-mapping", help="Hardware Mapping: regular, adafruit-hat, adafruit-hat-pwm" , choices=['regular', 'regular-pi1', 'adafruit-hat', 'adafruit-hat-pwm'], type=str) + self.parser.add_argument("--led-scan-mode", action="store", help="Progressive or interlaced scan. 0 Progressive, 1 Interlaced (default)", default=1, choices=range(2), type=int) + self.parser.add_argument("--led-pwm-lsb-nanoseconds", action="store", help="Base time-unit for the on-time in the lowest significant bit in nanoseconds. Default: 130", default=130, type=int) + self.parser.add_argument("--led-show-refresh", action="store_true", help="Shows the current refresh rate of the LED panel") + self.parser.add_argument("--led-slowdown-gpio", action="store", help="Slow down writing to GPIO. Range: 0..4. Default: 1", default=1, type=int) + self.parser.add_argument("--led-no-hardware-pulse", action="store", help="Don't use hardware pin-pulse generation") + self.parser.add_argument("--led-rgb-sequence", action="store", help="Switch if your matrix has led colors swapped. Default: RGB", default="RGB", type=str) + self.parser.add_argument("--led-pixel-mapper", action="store", help="Apply pixel mappers. e.g \"Rotate:90\"", default="", type=str) + self.parser.add_argument("--led-row-addr-type", action="store", help="0 = default; 1=AB-addressed panels; 2=row direct; 3=ABC-addressed panels; 4 = ABC Shift + DE direct", default=0, type=int, choices=[0,1,2,3,4]) + self.parser.add_argument("--led-multiplexing", action="store", help="Multiplexing type: 0=direct; 1=strip; 2=checker; 3=spiral; 4=ZStripe; 5=ZnMirrorZStripe; 6=coreman; 7=Kaler2Scan; 8=ZStripeUneven... (Default: 0)", default=0, type=int) + self.parser.add_argument("--led-panel-type", action="store", help="Needed to initialize special panels. Supported: 'FM6126A'", default="", type=str) + self.parser.add_argument("--led-no-drop-privs", dest="drop_privileges", help="Don't drop privileges from 'root' after initializing the hardware.", action='store_false') + self.parser.set_defaults(drop_privileges=True) + + def usleep(self, value): + time.sleep(value / 1000000.0) + + def run(self): + print("Running") + + def process(self): + self.args = self.parser.parse_args() + + options = RGBMatrixOptions() + + if self.args.led_gpio_mapping != None: + options.hardware_mapping = self.args.led_gpio_mapping + options.rows = self.args.led_rows + options.cols = self.args.led_cols + options.chain_length = self.args.led_chain + options.parallel = self.args.led_parallel + options.row_address_type = self.args.led_row_addr_type + options.multiplexing = self.args.led_multiplexing + options.pwm_bits = self.args.led_pwm_bits + options.brightness = self.args.led_brightness + options.pwm_lsb_nanoseconds = self.args.led_pwm_lsb_nanoseconds + options.led_rgb_sequence = self.args.led_rgb_sequence + options.pixel_mapper_config = self.args.led_pixel_mapper + options.panel_type = self.args.led_panel_type + + + if self.args.led_show_refresh: + options.show_refresh_rate = 1 + + if self.args.led_slowdown_gpio != None: + options.gpio_slowdown = self.args.led_slowdown_gpio + if self.args.led_no_hardware_pulse: + options.disable_hardware_pulsing = True + if not self.args.drop_privileges: + options.drop_privileges=False + + self.matrix = RGBMatrix(options = options) + + try: + # Start loop + print("Press CTRL-C to stop sample") + self.run() + except KeyboardInterrupt: + print("Exiting\n") + sys.exit(0) + + return True