class Element(Function): def __init__(self, id, config, inputData, return_queue, cmd_queue): super().__init__(id, config, inputData, return_queue, cmd_queue) def execute(self): ##################################### # # # REFERENCE IMPLEMENTATION # # # ##################################### specificConfig = self.config.get('SpecificConfig') if not specificConfig: self.return_queue.put( Record(None, message='Trigger: {:04d}'.format( self.config['Identifier']))) return gpioName = None mainMode = None subModeLED = None subModePWMLED = None gpioWorker = None cmd = None self.gpio = None self.initFlag = False for attrs in specificConfig: if attrs['Name'] == 'GPIO': gpioName = attrs['Data'] if attrs['Name'] == 'MainMode': mainMode = attrs['Data'] elif attrs['Name'] == 'SubModeLED': subModeLED = attrs['Data'] elif attrs['Name'] == 'SubModePWMLED': subModePWMLED = attrs['Data'] if mainMode == 'LED': self.gpio = LED(gpioName, initial_value=False) if subModeLED == 'Toggle on input': gpioWorker = self.ledWorkerToggle self.gpio.toggle() self.logLEDstate() elif subModeLED == 'Control on Input': gpioWorker = self.ledWorkerCtrl # set initial state if self.inputData is not None: if self.inputData: self.gpio.on() else: self.gpio.off() self.logLEDstate() elif subModeLED == 'Blink': def a(cmd=None): pass gpioWorker = a # assign an empty function self.gpio.blink() self.return_queue.put( Record( None, 'Start LED Blink Mode on GPIO{}'.format( self.gpio.pin.number))) elif mainMode == 'PWMLED': self.gpio = PWMLED(gpioName, initial_value=False) if subModePWMLED == 'Control on Input': gpioWorker = self.pwmLedWorkerCtrl if self.inputData is not None: self.gpio.value = self.inputData self.return_queue.put( Record( None, 'PWMLED: Set brightness on GPIO{} to {:.2f}'. format(self.gpio.pin.number, self.inputData))) elif subModePWMLED == 'Pulse': def a(cmd=None): pass gpioWorker = a # assign an empty function self.gpio.pulse() self.return_queue.put( Record( None, 'Start PWMLED Pulse Mode on GPIO{}'.format( self.gpio.pin.number))) ##################################### # # # Start of the infinite loop # # # ##################################### while (True): # Example code: Do something try: # Block for 1 second and wait for incoming commands cmd = None cmd = self.cmd_queue.get(block=True, timeout=1) except queue.Empty: pass if isinstance(cmd, ProcCMD): if cmd.bStop: # Stop command received, exit self.return_queue.put( Record(None, 'GPIO{} closed'.format(self.gpio.pin.number))) self.gpio.close() return gpioWorker(cmd) def logLEDstate(self): self.return_queue.put( Record( None, 'Switch LED on GPIO{} to {}'.format(self.gpio.pin.number, self.gpio.is_active))) def ledWorkerToggle(self, cmd=None): if cmd is None: return self.gpio.toggle() self.logLEDstate() def ledWorkerCtrl(self, cmd=None): if cmd is None: return if cmd.data: self.gpio.on() else: self.gpio.off() self.logLEDstate() def pwmLedWorkerCtrl(self, cmd=None): if cmd is None: return try: self.gpio.value = cmd.data except Exception: self.gpio.close() raise self.return_queue.put( Record( None, 'PWMLED: Set brightness on GPIO{} to {:.2f}'.format( self.gpio.pin.number, cmd.data)))
bright = Button(pin=24, pull_up=False, bounce_time=None, hold_time=1, hold_repeat=False, pin_factory=None) dim = Button(pin=25, pull_up=False, bounce_time=None, hold_time=1, hold_repeat=False, pin_factory=None) while True: while (on_off.is_pressed): led.toggle() time.sleep(1) while (bright.is_pressed): if (led._read() == 1.0): led.toggle() elif (led._read() == 0.0): led._write(-0.1) led.toggle() else: duty_cycle = led._read() duty_cycle -= 0.1 led._write(duty_cycle) led.toggle() time.sleep(1) while (dim.is_pressed): if (led._read() == 0.0):
record_led.off() standard_screen() while len(play) > 0: item = play.popleft() if item == 0 and menu and MainMenu.CurrentItem.startswith('0.') and not playing: selectedrecording = int(MainMenu.CurrentItem.split('.')[MainMenu.CurrentLevel]) custom_chars.load_progress() player = AudioIO.Player(channels=output_channels, rate=output_rate, device=output_device) player_stream = player.open(reclist[1][selectedrecording]) player_stream.start_playing() play_screen = dsphlp.display_screen(lcd) play_led.on() playing = True elif playing: player_stream.toggle() play_led.toggle() while len(loop) > 0: item = loop.popleft() if item == 0 and menu and not playing: if MainMenu.CurrentLevel == 0: standard_screen() idle = True menu = False else: MainMenu.levelAscent() dsphlp.dspwrite(lcd, MainMenu.AllItems[MainMenu.CurrentItem]) elif item == 0 and idle and not shutdown_bit: shutdown_bit = True shutdown_start_time = time.time() dsphlp.dspwrite(lcd, clear=1) shutdown_screen = dsphlp.display_screen(lcd)